目录
1.问题背景:
2.问题分析:
3.代码讲解:
3.1注入Redis
3.2.生成Token作为Redis的key进行缓存
4.总结:
1.问题背景:
当我们在分布式上应用Session实现数据的用户校验,例如登录,权限管理等时,容易发生Session不共享问题,原因是因为我们的Session是保存在服务端的。场景展示:一共有三台Tomcat服务器,当我们的访问第一台Tomcat时,Session数据在第一台Tomcat中生成了;这时当我们再去访问第二台Tomcat时,这台Tomcat中并没有对应的Session数据。这就是Session不共享问题。
2.问题分析:
解决Session不共享问题可以利用tomcat的拷贝复制功能,但是其性能的数据延迟可能会有点不安全,所以不推荐这种早期实现方案。
所以为了解决这个问题,可以考虑使用Redis来实现。
实现过程---->通过保存Token作为Redis的key来代替Session获取相关信息
3.代码讲解:
3.1注入Redis
@Resource
StringRedisTemplate stringRedisTemplate;
3.2.生成Token作为Redis的key进行缓存
//随机生成Token,作为登录令牌
String token = UUID.randomUUID().toString();
//存储到Redis中
stringRedisTemplate.opsForHash().putAll(token ,map);
//设置Token有效期
stringRedisTemplate.expire(tokenKey,30,TimeUnit.MINUTES);
3.3.通过获取Token拿到Redis中的值
//1.通过请求头获取token值拿到redis对应的value
String token = request.getHeader("authorization");
//2.根据Token值从Redis中获取中的用户信息
Map<Object, Object> map = stringRedisTemplate.opsForHash().entries(token);
4.总结:
以上是主要逻辑实现代码,可以结合自己的实际业务需要进行参考,比如可以利用拦截器对Redis值进行获取并更新过期时间。