categories:
- 架构
- author: mrzhou
- tags:
- SpringBoot
- redis
- session
- 单点登录
基于SpringBoot+Redis的Session共享与单点登录
前言
使用Redis来实现Session共享,其实网上已经有很多例子了,这是确保在集群部署中最典型的redis使用场景。在SpringBoot项目中,其实可以一行运行代码都不用写,只需要简单添加添加依赖和一行注解就可以实现(当然配置信息还是需要的)。

然后简单地把该项目部署到不同的tomcat下,比如不同的端口(A、B),但项目访问路径是相同的。此时在A中使用set方法,然后在B中使用get方法,就可以发现B中可以获取A中设置的内容。
但如果就把这样的一个项目在多个tomcat中的部署说实现了单点登录,那就不对了。
所谓单点登录是指在不同的项目中,只需要任何一个项目登录了,其他项目不需要登录。
同样是上面的例子,我们把set和get两个方法分别放到两个项目(set、get)中,并且以集群方式把两个项目都部署到服务器A和B中,然后分别访问A服务器的set和B服务器的get,你就会发现完全得不到你想要的结果。

同一项目中的set/get
依赖添加就不说了,直接使用最简单的方式
@SpringBootApplication@EnableRedisHttpSession@RestControllerpublic class SessionShareApplication { public static void main(String[] args) { SpringApplication.run(SessionShareApplication.class, args); } @Autowired HttpSession session; @Autowired HttpServletRequest req; @GetMapping("/set") public Object set() { session.setAttribute("state