SpringBoot整合Shiro 注解无效

今天在学习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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容