这篇文章主要介绍了springboot集成shiro权限管理简单实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
前言
为了解决项目当中的权限管理问题,我们一般会选择引入spring security或者shiro框架来帮助我们更好地更快地构建权限管理体系。
依赖
首先第一步,我们需要给当前项目引入对应的依赖包。与spring boot集成一般首选starter包。
配置
无论是spring security还是shiro,两者都是基于servlet的Filter过滤器机制实现的权限管理。所以第一步配置我们就需要把对应的Filter给加入进来。
Filter过滤器配置
securityManager配置
看上面代码,我们就可以分析出,需要把这些Filter过滤器创建出来,除了配置一些需要拦截的url之外,我们还要创建一个非常核心的securityManager,这个才是权限验证过程处理的核心。
别看securityManager里面我只设置了Realm,其实securityManager就像一个大领导,压根不干活儿,有啥活都派给底下的小弟去干。
我们来看看securityManager底下到底有哪些小弟;
后续的博客中会逐一解析这些小弟的作用,今天就先把如何简单集成shiro讲完。
- SessionManager:管理用户session;
- SubjectDao:负责Subject保存和删除;
- CacheManager:负责缓存管理;
- Realm:负责用户登陆和权限验证;
- RememberMeManager:负责实现remember me功能;
- EventBus:事件总线;
- SubjectFactory:创建Subject;
Realm配置
下面我们应该要给出如何判断用户登陆和鉴定用户权限了:
因为Realm需要查询用户的密码已经改用户对应的角色和权限,所以我们自定义了自己的Realm。
通过继承AuthorizingRealm:
到这里,我们可以看出,Realm就是用来帮助用户登陆,并且在用户访问需要权限的接口时,查询出用户的角色和权限,交给决策器来决定用户是否登陆成功,鉴权是否通过。
密码加密
这是一个不容易被注意的点,使用默认的配置时只会简单的比较输入的密码和数据库查出来的密码是否一致,这显然是不符合要求的,因为我们数据库里面的密码是已经加密好了的。
另一个就是我们在创建用户的时候也是需要使用到同样的密码加密手段,所以我们有必要把密码加密给拎出来处理一下,做一个自定义的加密。
其实我们就是继承了HashedCredentialsMatcher,在它的基础上提高了直接针对密码加密的功能。这样既能满足shiro的登陆验证,又能拿出来用到创建用户的时候加密使用。
测试
为了验证我们的配置是否成功,我们需要写几个测试接口:
上面的几个接口,我们如果直接访问的话,在浏览器中,会被重定向到"/login"页面,因为我们目前没有这个页面,所以一旦重定向这个url,说明用户没有登陆。
其次我们通过调用post请求"/login",提交username和password成功登陆后,页面会重定向到"/index"页面,目前我们也是没有这个页面的,不过从响应体中可以看到响应码是302。
当我们在用户登陆成功后,再访问"/user/read"是能正常访问,并返回结果"read";如果访问"/user/123456"是不行的,页面会直接报500错误。
通过上述测试,我们已经初步完成了shiro的集成
到此这篇关于springboot集成shiro权限管理简单实现的文章就介绍到这了,更多相关springboot 集成shiro内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!