今天在学习Springboot整合shiro的时候发现加的关于权限的注解拦截不生效
@RequestMapping("/userList")
@RequiresPermissions("userInfo:list")
public String getUserAll(Map map) {}
登陆之后即使当前用户没有角色和权限依然可以访问这个地址
然后就想到既然这个注解无效 那就看一下ShiroRealm中的授权方法中有没有把当前用户拥有的角色和权限添加到realm中 之后在这个方法中下了一个断点
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {}
但是无论怎样都进不了这个方法 上网查了之后知道了这个方法通常是在以下几种情况下触发
-
subject.hasRole("xx")或者subject.isPermitted("xx") 调用方法判断是否含有某个角色或者权限
-
@RequiresRoles("xx")或者@RequiresPermissions("xx") 在方法上加注解
-
<shiro:hasPermission="xx" > 在页面中加入shiro标签
之后又上网重新查询shiro注解无效发现在传统的springmvc+shiro项目中有这样一个配置
<aop:config proxy-target-class="true"/>
这个配置的作用就是使shiro支持注解 而在springboot项目中shiroconfig类中也有关于开启shiro注解支持的配置
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor =new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager());
return authorizationAttributeSourceAdvisor;
}
光有上面一段代码还是不行
@Bean
@ConditionalOnMissingBean
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){
DefaultAdvisorAutoProxyCreator app=new DefaultAdvisorAutoProxyCreator();
app.setProxyTargetClass(true);
return app;
}
在ShiroConfig类中加上这段代码是可以完美解决Shiro注解无效的问题 这段代码中可以看到和在配置文件中相同的配置app.setProxyTargetClass(true)
网友评论