前面我们整合了SpringBoot+Shiro+JWT
实现了登录认证,但还没有实现权限控制,这是接下来的工作。
1. JWT的Token续签
1.1 续签思路
- 业务逻辑:
- 登录成功后,用户在未过期时间内继续操作,续签token。
- 登录成功后,空闲超过过期时间,返回token已失效,重新登录。
- 实现逻辑:
- 登录成功后将token存储到redis里面(这时候k、v值一样都为token),并设置过期时间为token过期时间
- 当用户请求时token值还未过期,则重新设置redis里token的过期时间。
- 当用户请求时token值已过期,但redis中还在,则JWT重新生成token并覆盖v值(这时候k、v值不一样了),然后设置redis过期时间。
- 当用户请求时token值已过期,并且redis中也不存在,则用户空闲超时,返回token已失效,重新登录。
1.2 编码实现
pom.xml
引入Redis
1 | <!-- Redis --> |
- 编写
Redis
工具类
1 |
|
- JwtUtil中增加返回过期秒数的方法
1 | public class JwtUtil { |
- 改写登录逻辑,生成
token
后存入Redis
1 |
|
- 改写
MyRealm
,加入token
续签逻辑
1 |
|
到此,JWT的Token续签的功能已经全部实现了。
2. 权限管理
2.1 首先增加三张数据表
1 | /** 角色表 */ |
2.2 编码实现
- 补全
MyRealm
中授权验证逻辑
1 |
|
Service
中添加获取角色与权限的方法,DAO与Mapper请移步源码。
1 | public interface SysService { |
Controller
中使用@RequiresPermissions
来控制权限
1 |
|
注:这里的登录认证+授权控制 在
github
源码tag
的V2.0
中,后续版本再加入前端动态路由控制等。
源码地址: https://github.com/chaooo/springboot-vue-shiro.git
仅下载后端认证+授权控制源码:git clone --branch V2.0 https://github.com/chaooo/springboot-vue-shiro.git