SpringSecurity-12-Redis实现基于session共享登录方案

简介: 如果我们使用单机版本的Session存储身份信息的时候,如果服务器挂掉,那么服务就无法使用了。如果我们将项目部署到CD两台服务器上,Session就无法保持一致。如果用户user第一次访问C服务器,然后再次请求的时候访问D服务器,但是B没有存储user的session,这样用户就需要重新登录。所以为了解决这种情况,我们可以将session放到redis中,以后用户请求都可以从redis中获取session,从而保持登录二点一致性。

SpringSecurity-12-Redis实现基于session共享登录方案

简述


如果我们使用单机版本的Session存储身份信息的时候,如果服务器挂掉,那么服务就无法使用了。如果我们将项目部署到CD两台服务器上,Session就无法保持一致。如果用户user第一次访问C服务器,然后再次请求的时候访问D服务器,但是B没有存储user的session,这样用户就需要重新登录。


所以为了解决这种情况,我们可以将session放到redis中,以后用户请求都可以从redis中获取session,从而保持登录二点一致性。


Redis 安装

Windows下安装



下载地址:https://github.com/tporadowski/redis/releases


redis支持windows的32位和64位,我们根据系统情况进行下载,然后解压。

0f750a4fcaffa3550e2e0dee5aa81990.png



解压后打开文件夹,双击redis-server.exe打开redis服务,双击redis-cli.exe打开客户端[外链图片转存中…(img-iQBSHgEy-1648684324514)]

服务端:

客户端:


fb69a0b29daec8c7fb66b38ca6aac74e.png


集成Spring session


引入maven依赖

在spring-session-redis和redis的maven依赖在项目的pom.xml中

        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>



application.yml 配置 redis

spring:
  session:
    timeout: 1m
    store-type: redis
  redis:
    database: 0
    port: 6379


启动项目, 进行登录

启动项目,进行登录,然后在redis的客户端输入**keys ***查看保存的session信息

  • 默认情况下, 浏览器的 Cookie 中保存 SessionID 名称是 JSESSIONID

9ab9517bd7aa01e42a63f226f7e9e424.png



  • 但是再使用redis的时候保存session的信息, 浏览器的 Cookie 中保存 SessionID 名称是 SESSION

这样就是再 session失效后,我们只是清除了JSESSIONID,当再次请求的时候,都不会再进行登录。

解决


我们统一在浏览器中将Cookie保存的SessionID名称设置为JSEESIONID

server:
  port: 8888
  servlet:
    session:
      cookie:
        name: JSESSIONID



重启项目,再次进行登录查看cookie保存的SessionID

如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!


原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!

目录
相关文章
|
3月前
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
264 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
9月前
|
canal NoSQL 关系型数据库
Redis应用—7.大Value处理方案
本文介绍了一种用于监控Redis大key的方案设计及其实现步骤。主要内容包括:方案设计、安装与配置环境、binlog数据消费者。
370 29
Redis应用—7.大Value处理方案
|
3月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
4月前
|
监控 NoSQL 关系型数据库
保障Redis与MySQL数据一致性的强化方案
在设计时,需要充分考虑到业务场景和系统复杂度,避免为了追求一致性而过度牺牲系统性能。保持简洁但有效的策略往往比采取过于复杂的方案更加实际。同时,各种方案都需要在实际业务场景中经过慎重评估和充分测试才可以投入生产环境。
269 0
|
7月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
566 3
|
9月前
|
存储 监控 NoSQL
Redis集群有哪些方案
1. 主从复制集群 : 读写分离, 一主多从 , 解决高并发读的问题 2. 哨兵集群 : 主从集群的结构之上 , 加入了哨兵用于监控集群状态 , 主节点出现故障, 执行主从切换 , 解决高可用问题 3. Cluster分片集群 : 多主多从 , 解决高并发写的问题, 以及海量数据存储问题 , 每个主节点存储一部分集群数据
|
9月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
11月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
325 1
|
12月前
|
存储 监控 NoSQL
Redis集群方案汇总:概念性介绍
本文介绍了Redis的三种高可用和分布式解决方案:**Redis Replication(主从复制)**、**Redis Sentinel(哨兵模式)** 和 **Redis Cluster(集群模式)**。Redis Replication实现数据备份和读写分离,适合数据安全和负载均衡场景;Redis Sentinel提供自动故障转移和监控功能,适用于读写分离架构;Redis Cluster通过分布式存储和自动故障转移,解决单点性能瓶颈,适合大规模数据和高并发场景。文中还详细描述了各方案的工作原理、优缺点及适用场景。
296 0