shiro进⾏权限控制的四种⽅式我们使⽤shiro进⾏权限控制 有以下⼏种⽅式
1. URL拦截权限控制:基于filter过滤器实现
我们在spring配置⽂件中配置shiroFilter时配置
<!--指定URL级别拦截策略 -->
<property name="filterChainDefinitions">
<value>
/css/ = anon
/js/ = anon
/images/ = anon
/validatecode.jsp = anon
/login.jsp = anon
/
userActionlogin.action = anon
/pagebasestaff.action = perms["staff-list"]
/ = authc
</value>
</property>
2. ⽅法注解权限控制:基于代理技术实现
我们在代码⽅法上⽤注解声明调⽤该⽅法需要什么权限。
⾸先要在spring配置⽂件中进⾏声明开启shiro注解:
<!-- 开启shiro框架注解⽀持 -->*
<bean id="defaultAdvisorAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 必须使⽤cglib⽅式为Action对象创建代理对象 -->
<property name="proxyTargetClass" value="true"/>
</bean>
<!-- 配置shiro框架提供的切⾯类,⽤于创建代理对象 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>
然后在⽅法上声明:
@RequiresPermissions("staff-delete")
//执⾏这个⽅法,需要当前⽤户具有staff-delete这个权限
public String deleteBatch(){
staffService.deleteBatch(ids);
return LIST;
}
*
3. 页⾯标签权限控制:页⾯表签技术实现
⾸先要在jsp页⾯进⼊表签:
<%@ taglib uri="/tags" prefix="shiro" %>
然后包裹权限控制的内容
<shiro:hasPermission name="Permission">
xxxxxxxxxxxxxxxx
</shiro:hasPermission>
4.代码级别权限控制:
public String edit(){
Subject subject = Subject();
subject.checkPermission("staff-edit");
Staff staff = staffService.Id());
staff.Name());
staff.Telephone());
staff.Haspda());
staff.Standard());
staff.Station());
staffService.update(staff);
return LIST;
}
总结:
使⽤shiro进⾏权限控制时 这四种⽅法并不是进⾏单⼀的使⽤,是相互结合的使⽤从⽽完整的进⾏权限控制。⼀.在⾃定义的realm中进⾏权限控制
在l⽂件中添加 /areaAction_pageQuery.action = perms["area"]
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 注⼊shiro框架核⼼对象,安全管理器 -->
<property name="securityManager" ref="securityManager"/>
<!--private String loginUrl;登录页⾯
private String successUrl;登录成功后跳转页⾯
private String unauthorizedUrl;权限不⾜时的提⽰页⾯-->
<property name="loginUrl" value="/login.html"/>
<property name="successUrl" value="/index.html"/>
<property name="unauthorizedUrl" value="/unauthorized.html"/>
<!-- 指定URL拦截规则 -->
<property name="filterChainDefinitions">
<!--authc:代表shiro框架提供的⼀个过滤器,这个过滤器⽤于判断当前⽤户是否已经完成认证,
如果当前⽤户已经认证,就放⾏,如果当前⽤户没有认证,跳转到登录页⾯
anon:代表shiro框架提供的⼀个过滤器,允许匿名访问-->
<value>
/css/* = anon
/images/* = anon
/js/** = anon
/
validatecode.jsp* = anon
/userAction_login.action = anon
/areaAction_pageQuery.action = perms["area"]
/** = authc
</value>
</property>
</bean>
此时访问areaAction_pageQuery.action是页⾯不会查询到数据,须要为⽤户授权
在⾃定义realm中为⽤户授权
@Override
/**
* 授权⽅法
*/
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//为⽤户授权,只需将⽤户的权限添加info中即可
info.addStringPermission("area");
return info;
}
⼆.使⽤shiro的⽅法注解为⽤户授权
1.在spring配置⽂件l中配置开启shiro注解⽀持
<!-- 基于spring⾃动代理⽅式为service创建代理对象,实现权限控制 -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> <!-- 强制使⽤cglibdaili -->
<property name="proxyTargetClass" value="true"></property>
</bean>
<!-- 配置切⾯ -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"></property>
</bean>
2.配置事物注解,强制使⽤cglib代理
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
3.在service上配置注解
1 @RequiresPermissions("courier:delete")
2 public void deleteBatch(String ids) {
3 //判断是否为空
4 if(StringUtils.isNoneBlank(ids)){shiro安全框架
5 String[] idsArrays = ids.split(",");
6 for (String id : idsArrays) {
7 Integer courierid = Integer.parseInt(id);
8 dao.deleteCourier(courierid);
9 }
10 }
11 }
三.使⽤shiro标签进⾏权限控制
1.在jsp页⾯中引⼊shiro标签库
<%@ taglib prefix="shiro" uri="/tags" %>
2.在页⾯中使⽤标签
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="shiro" uri="/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- 判断当前⽤户是否已经认证,已认证就可以看到标签中的内容 -->
<shiro:authenticated>
看到内容就说明你已经认证成功了!
</shiro:authenticated>
<br>
<!-- 判断当前⽤户是否拥有指定的权限 -->
<shiro:hasPermission name="area">
<input value="这是判断权限的按钮">
</shiro:hasPermission>
<br>
<!-- 判断当前⽤户是否拥有指定的⾓⾊ -->
<shiro:hasRole name="admin">
<input value="这是判断⾓⾊的按钮">
</shiro:hasRole>
</body>
</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论