SpringBoot简单集成Shiro登录授权
今天,我们来做一个简单的shiro授权功能,此篇接着上次的登录验证为前提往下讲解,请先了解了shrio的基本组件,再观看本文更佳,上集地址:https://www.cnblogs.com/keke26/p/12841961.html
pom依赖包和相关日志文件我们在上篇已经讲解过,此处略
这次, 我们只需要在UserRealm类中,添加授权功能即可
1 //授权 2 @Override 3 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { 4 System.out.println("执行了授权"); 5 6 //new 一个简单的授权工具,用来给当前用户验证授权 7 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); 8 9 //subject获取当前的用户对象 10 Subject subject = SecurityUtils.getSubject(); 11 User currentUser= (User) subject.getPrincipal(); 12 13 //将用户的Perms(授予的权限)添加到组件中,后续验证使用 14 info.addStringPermission(currentUser.getPerms()); 15 16 return info; 17 }
接下来,我们只需要在shrioConfig中配置一下shiroFactoryBean 即可完成!
1 //shiroFilterFactoryBean 2 @Bean //此处Qualifier绑定的是getDefaultSecurityManager这个bean对象 3 public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){ 4 //前两步固定套路,工厂模式创建一个shiroFilterFactoryBean,然后将下面的defaultWebSecurityManager设置进来 5 ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); 6 bean.setSecurityManager(defaultWebSecurityManager); 7 8 //authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问 9 Map<String, String> filterMap = new LinkedHashMap<>(); 10 11 //在上次讲解的基础上,将此处需要权限,以及需要什么perms权限的网址添加进来,即可完成授权验证! 12 //注意此处的页面路劲不是网页名称,而是MVC中的方法 13 filterMap.put("/main","perms[user:add]"); 14 //拦截所有vip请求的操作 15 filterMap.put("/vip/**","perms[user:add]"); 16 bean.setFilterChainDefinitionMap(filterMap); 17 18 //设置登录返回路径 19 bean.setLoginUrl("/index"); 20 21 //设置账户权限不足时返回路径 22 bean.setUnauthorizedUrl("/unknow"); 23 24 25 return bean; 26 }
关于perms,个人理解为只需要在数据库中,给需要授权的用户,添加一行属性perms,其中可自行定义授权状态,比如我现在的user:add 即为授权状态,意思为只有perms属性为user:add才可以进入此网址
以下是我的用户数据库
至此,我们就完成了shrio的授权验证功能