作者:社会主义接班人cnblogs.com/5ishare/p/10461073.html
用户权限管理一般是对用户页面、按钮的访问权限管理。Shiro框架是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理,对于Shiro的介绍这里就不多说。本篇博客主要是了解Shiro的基础使用方法,在权限管理系统中集成Shiro实现登录、url和页面按钮的访问控制。
一、引入依赖
使用SpringBoot集成Shiro时,在pom.xml中可以引入shiro-spring-boot-web-starter。由于使用的是thymeleaf框架,thymeleaf与Shiro结合需要 引入thymeleaf-extras-shiro。
![16dcea5d6cbfa1707b7d556ebc88a81f.png](https://i-blog.csdnimg.cn/blog_migrate/5c25c93b9e535618efdab38621c73466.jpeg)
二、增加Shiro配置
有哪些url是需要拦截的,哪些是不需要拦截的,登录页面、登录成功页面的url、自定义的Realm等这些信息需要设置到Shiro中,所以创建Configuration文件ShiroConfig。
![f916877c2dfb74a7f493b828c6500795.png](https://i-blog.csdnimg.cn/blog_migrate/39a8444356ea5f078125ab4a27542113.jpeg)
ShiroDialect这个bean对象是在thymeleaf与Shiro结合,前端html访问Shiro时使用。
三、自定义Realm
在自定义的Realm中继承了AuthorizingRealm抽象类,重写了两个方法:doGetAuthorizationInfo和doGetAuthenticationInfo。doGetAuthorizationInfo主要是用来处理权限配置,doGetAuthenticationInfo主要处理身份认证。
这里在doGetAuthorizationInfo中,将role表的id和permission表的code分别设置到SimpleAuthorizationInfo对象中的role和permission中。
还有一个地方需要注意:@Component("authorizer"),刚开始我没设置,但报错提示需要一个authorizer的bean,查看AuthorizingRealm可以发现它implements了Authorizer,所以在自定义的realm上添加@Component("authorizer")就可以了。
![e035df6fab09ed4265f7ad77f79c154f.png](https://i-blog.csdnimg.cn/blog_migrate/7d6088218ab2dea19696d051d967516a.jpeg)
四、登录认证
1.登录页面
这里做了一个非常丑的登录页面,主要是自己懒,不想在网上复制粘贴找登录页面了。
![e0b12099f80b202361c9af8b5d2815a4.png](https://i-blog.csdnimg.cn/blog_migrate/5dc998a6d8b5e138ab1aa46e4f7389e4.jpeg)
2.处理登录请求
在LoginController中通过登录名、密码获取到token实现登录。
![21c76ca5296d82e44217806f31cd56f8.png](https://i-blog.csdnimg.cn/blog_migrate/d378793fa3d4bd963c8053bb17c45bbf.jpeg)
五、Controller层访问控制
1.首先来数据库的数据,两张图是用户角色、和角色权限的数据。
![dfa69009982397cd345d5fc4cb0466d9.png](https://i-blog.csdnimg.cn/blog_migrate/fe4e46dc5c28028b44b870b596e9d4b6.jpeg)
![6cba16b43de92a39929e3fc9d5da4f9c.png](https://i-blog.csdnimg.cn/blog_migrate/10ca7ac88f8f1357e5e25b87c41bef61.jpeg)
2.设置权限
这里在用户页面点击编辑按钮时设置需要有id=002的角色,在点击选择角色按钮时需要有code=002的权限。
@RequestMapping(value = "/edit