springboot3+vue3(八)Redis 基础使用 -- 登录优化
Redis基础使用
1、在pom文件中添加Redis坐标
<!--redis坐标--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
2、在yml中添加redis的配置信息
3、在测试类中来编写
@SpringBootTest //如果在测试类上添加了这个注解,那么将来单元测试方法执行之前,会先初始化Spring容器 public class RedisTest { @Autowired private StringRedisTemplate stringRedisTemplate; @Test public void testset(){ //往redis中存储一个键值对 StringRedisTemplate ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); //存储至Redis operations.set("username","zhangsan"); operations.set("id","1",10, TimeUnit.MINUTES); //key value timeout-过期时间 unit-过期时间单位TimeUnit枚举 } @Test public void testget(){ ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); //从Redis中获取数据 System.out.println(operations.get("username")); } @Test public void testdelete(){ ValueOperations<String, String> operations = stringRedisTemplate.opsForValue(); //从Redis中删除对应的键值 operations.getOperations().delete("username"); } }
实战 -- 登录优化
当用户调用登录接口时返回token,此时用这个token去访问其它接口是没有问题的。
当用户修改密码后,重新登录(调用登录接口生成新的token)后,使用旧的token去调用其它接口还是可以正常调用,这样就会存在问题。
解决思路:当用户登录(调用登录接口生成token)时,我们同时往Redis里存放一份token,当用户调用其它接口时,我们拿调用登录接口返回的token与Redis中存放的token去比对。如果一致则放行,如果不一致则代表token失效。
实现:
1、在登录接口生成token后存储至redis中
2、在登录拦截器中,校验token前,拿当前的token去redis中获取相同的token看能不能获取到,如果获取不到说明token已失效
3、修改密码接口中,当密码修改成功后,在redis中删除对应的token
效果展示:
调用登录接口生成token令牌
此时调用获取当前登录用户详细信息接口正常
调用修改密码接口后,再次调用获取当前登录用户详细信息接口
重新登录后生成新的token,再拿新的token去访问获取当前登录用户详细信息接口