美文网首页
SpringBoot整合Shiro 注解无效

SpringBoot整合Shiro 注解无效

作者: 灰灰灰灰灰灰灰帽子 | 来源:发表于2018-10-06 23:13 被阅读655次

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

相关文章

网友评论

      本文标题:SpringBoot整合Shiro 注解无效

      本文链接:https://www.haomeiwen.com/subject/oujkaftx.html