北京网站建设价格便宜,营销型网站建设域名,姚家园做网站,沪尚茗居上海门店地址目录
1 前言
2 实现步骤
2.1 软件环境准备
2.1.1 Redis的安装
2.1.2 在pom.xml中添加依赖
2.1.3 在application.yml中进行相关配置
2.2 StringRedisTemplate的常用方法
2.2.1 获取operations
2.2.2 主要方法
2.3 令牌主动失效机制
2.3.1 登录时将令牌存入Redis
2.…目录
1 前言
2 实现步骤
2.1 软件环境准备
2.1.1 Redis的安装
2.1.2 在pom.xml中添加依赖
2.1.3 在application.yml中进行相关配置
2.2 StringRedisTemplate的常用方法
2.2.1 获取operations
2.2.2 主要方法
2.3 令牌主动失效机制
2.3.1 登录时将令牌存入Redis
2.3.2 修改密码时删除旧的令牌
2.3.3 拦截器中进行检验 1 前言
在我们使用JWT令牌进行登录验证的时候不可避免的也会出现一些问题。比如当用户修改密码后旧的令牌仍然生效。因此我们可以采用Redis进行登录的优化。
2 实现步骤
2.1 软件环境准备
2.1.1 Redis的安装
百度网盘的链接如下解压即可使用
链接https://pan.baidu.com/s/1nAXT6alX-pMxxSfAe6-tsw?pwd0529
提取码0529
2.1.2 在pom.xml中添加依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency
在添加依赖后会自动向IOC容器中注入StringRedisTemplate对象通过它我们可以对Redis数据库进行相关操作。
2.1.3 在application.yml中进行相关配置
#redis初始状态没密码所以暂时不需要配置
spring:data:redis:port: 6379 #端口号host: localhost #本地database: 0 #redis有16个小库默认0
2.2 StringRedisTemplate的常用方法
2.2.1 获取operations
Autowired
private StringRedisTemplate stringRedisTemplate;
//其它
ValueOperationsString, String operations stringRedisTemplate.opsForValue();2.2.2 主要方法
相关方法作用参数operations.set(xx, xx, 1, TimeUnit.HOURS);//过期时间为1小时向Redis中插入键值均为xx的数据 1.键(String) 2.值(String) 3.过期时间数(long) 4.时间数单位(TimeUnit.xx) 注3和4可以不要 operations.get(xx);从Redis中获取键为xx的值键(String)operations.getOperations().delete(xx);删除Rdis键为xx的键值对键(String)
2.3 令牌主动失效机制
2.3.1 登录时将令牌存入Redis
public class UserController {PostMapping(/login)public ResultString login(//其它) {//其它代码//获得JWT令牌String token JwtUtil.genToken(claims);//将JWT令牌存入RedisValueOperationsString, String operations stringRedisTemplate.opsForValue();//过期时间要和JWT令牌保持一致operations.set(token, token, 1, TimeUnit.HOURS);}//其它代码
}
2.3.2 修改密码时删除旧的令牌
public class UserController {//其它代码PatchMapping(/updatePwd)//RequestHeader(name Authorization) String token从请求头中获取JWT令牌public Result updatePwd(RequestBody MapString, String params, RequestHeader(name Authorization) String token) {//其它代码//删除Redis中旧的JWT令牌ValueOperationsString, String operations stringRedisTemplate.opsForValue();operations.getOperations().delete(token);}
}
2.3.3 拦截器中进行检验
public class LoginInterceptor implements HandlerInterceptor {//其它Overridepublic boolean preHandle(//其它) {try {//其它代码//没获取到值则不放行ValueOperationsString, String operations stringRedisTemplate.opsForValue();if (operations.get(token) null) {throw new RuntimeException();}//放行return true;} catch (Exception e) {//不放行return false;}}
}