SpringBoot进阶之整合Shiro鉴权框架(四)前言 大家好,一直以来我都本着用最通俗的话理解核心的知识点,我认为所有的难点都离不开基础知识的铺垫。目前正在出一个SpringBoot长期系列教程,从入门到进阶,篇幅会较多适合人群学完Java基础想通过Java快速构建web应用程序想学习或了解SpringBootSpringBoot进阶学习 大佬可以绕过背景 如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识,接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获情景回顾 上期带大家学习了Shiro中如何记录用户状态,本期将带大家学习Shiro中如何进行权限认证。同样的,我们集成到Springboot中。doGetAuthenticationInfo() 还记得之前带大家实现的doGetAuthenticationInfo()方法实现的用户认证吗,其实还有一个,我们可以用它实现权限控制,这里我们基于RBAC基于用户角色来控制权限,之前有一个方法没实现,我们现在实现一下:获取用户角色和权限OverrideprotectedAuthorizationInfodoGetAuthorizationInfo(PrincipalCollectionprincipal){Useruser(User)SecurityUtils。getSubject()。getPrincipal();StringuserNameuser。getUsername();SimpleAuthorizationInfosimpleAuthorizationInfonewSimpleAuthorizationInfo();获取用户角色SetStringroleSetnewHashSet();StringroleUserMock。getRole(userName);roleSet。add(role);simpleAuthorizationInfo。setRoles(roleSet);获取用户权限StringpermissionUserMock。getPermission(userName);SetStringpermissionSetnewHashSetString();permissionSet。add(permission);simpleAuthorizationInfo。setStringPermissions(permissionSet);returnsimpleAuthorizationI}开启权限注解 在Shiro中,为我们提供了一列好用的注解,我们一起看一下:表示Subject已经通过login身份验证RequiresAuthentication表示当前是用户身份RequiresUser表示当是游客身份。RequiresGuest表示当前需要的角色RequiresRoles(value{admin,user},logicalLogical。AND)表示当前需要的权限RequiresPermissions(value{p:admin,p:user},logicalLogical。OR) 使用它之前,我们需要开启它的注解,怎么做呢?在ShiroConfig中加入:BeanpublicAuthorizationAttributeSourceAdvisorauthorizationAttributeSourceAdvisor(SecurityManagersecurityManager){AuthorizationAttributeSourceAdvisorauthorizationAttributeSourceAdvisornewAuthorizationAttributeSourceAdvisor();authorizationAttributeSourceAdvisor。setSecurityManager(securityManager);returnauthorizationAttributeSourceA} 下面直接使用就可以了:RestControllerpublicclassIndexController{RequiresPermissions(p:user)RequestMapping(index)publicStringindex(Modelmodel){登录成后,即可通过Subject获取登录的用户信息Useruser(User)SecurityUtils。getSubject()。getPrincipal();model。addAttribute(user,user);returnindexuser。getUsername();}} 这样就可以了,很简单,大家可以自己运行一下。还有一个疑问用户没有权限,我想自定义返回错误信息怎么办呢?很简单,我们一起看一下权限异常捕获 还记得之前教大家的全局已经捕获吗?没错我们只要在那里加上要捕获的异常类就好了,实际上它是抛出了AuthorizationException的异常ControllerAdvicepublicclassExceptionController{ExceptionHandler(valueAuthorizationException。class)publicStringhandleAuthorizationException(){return您当前没有权限访问请联系管理员;}} 这样就可以了结束语 本期内容就到这里结束了,总结一下,本节主要讲了Shiro如何进行权限认证以及常用的权限注解,大家可以自己多试试下期预告 下期给大家讲讲Shiro中如何进行缓存,缓存对于业务来讲还是比较重要的,尤其对于量大的情况下。欢迎加群一起学习交流往期内容我的博客(阅读体验较佳)Springboot入门Springboot基础(一)Springboot基础(二)Springboot基础(三)Springboot基础(四)Springboot基础(五)SpringBoot进阶之缓存中间件RedisSpringBoot进阶之MyBatis分页插件SpringBoot进阶之跨域问题处理(CORS)SpringBoot进阶之日志集成SpringBoot进阶之请求拦截SpringBoot进阶之事务管理及并发问题SpringBoot进阶之整合Shiro鉴权框架(一)SpringBoot进阶之整合Shiro鉴权框架(二)SpringBoot进阶之整合Shiro鉴权框架(三)项目源码(源码已更新欢迎star)springbootall地址:https:github。comqiuChengleiyspringbootall。git