这种授权主要有3个配置:
1.springmvc.xml
<!-- 开启aop,对类代理 -->
<aop:config proxy-target-class="true"></aop:config>
<!-- 开启shiro注解支持 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"></property>
</bean>
2.自定义realm中对于AuthorizationInfo方法的重写
//授权方法
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
上面这两句是获取已登录的用户信息
//根据身份信息获取权限信息
List<String> permissions = new ArrayList<String>();
这句是初始化一个将要返回给授权器的一个字符串集合
if(user.getPositionNo()==0)
{
permissions.add("0");
}else if(user.getPositionNo()>7)
{
permissions.add("0");
permissions.add("1");
permissions.add("2");
}else
{
permissions.add("1");
}
这个判断是我项目中的判断,你们根据自己要求改动
//查到权限数据,返回授权信息
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
simpleAuthorizationInfo.addStringPermissions(permissions);
return simpleAuthorizationInfo;
把字符串集合返回给授权器,当项目中进行action访问的方法上有权限注解时,shiro就会在这个字符串集合中遍历查找有没有注解中的字符串,如果有就会执行action中的方法,如果没有就会报错 页面返回500错误页面
}
3.action中添加注解
@RequestMapping("/a")
@ResponseBody
@RequiresPermissions("2")
public void geta(){
}
以上3步就可以简单使用shiro的授权机制了,至于没有权限时,返回的500页面 ,就需要自己配置了.