目录


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值进行获取并更新过期时间。