-
创建一个Maven项目名为
demo1
-
需要添加的依赖, 使用的springboot版本是
2.1.4.RELEASE
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
如果使用的是最新版本
2.1.5.RELEASE
或者其以后的版本,则还需要额外添加Spring Security
依赖,(其他操作不受影响,仅仅只是多了一个依赖,当然也多了 Spring Security 的一些默认认证流程) -
添加redis配置
server: port: 8081 spring: redis: host: 127.0.0.1 port: 9455 password: 123456 database: 1
更加详细的配置可参看官方文档
-
配置完成后 ,就可以使用 Spring Session 了,其实就是使用普通的 HttpSession ,其他的 Session 同步到 Redis 等操作,SpringBoot框架已经自动帮你完成了
-
创建controller来设置session
@RestController @RequestMapping("demo1") public class Demo1Controller { @GetMapping("set_session") public String setSession(HttpServletRequest request) { request.getSession().setAttribute("projectName", "demo1"); return "demo1 install session success"; } @GetMapping("get_session") public String getSession(HttpServletRequest request) { String projectName = (String) request.getSession().getAttribute("projectName"); return "demo1 get projectName is " + projectName; } }
-
参照上边的配置再创建一个项目为
demo2
- 修改
server.port
为8082
- 修改controller内容如下
@RestController @RequestMapping("demo2") public class Demo2Controller { @GetMapping("set_session") public String setSession(HttpServletRequest request) { request.getSession().setAttribute("projectName", "demo2"); return "demo2 install session success"; } @GetMapping("get_session") public String getSession(HttpServletRequest request) { String projectName = (String) request.getSession().getAttribute("projectName"); return "demo2 get projectName is " + projectName; } }
- 修改
-
分别启动
demo1
和demo2
两个项目,查看共享效果- 访问
demo1
设置session地址 localhost:8081/demo1/set_session 将projectName
设置为demo1
,访问完后,数据已经自动同步到redis中
- 访问
demo1
获取session地址 localhost:8081/demo1/set_session 查看projectName
如图
- 访问
demo2
获取session地址 localhost:8082/demo2/get_session 查看projectName
如图,看到的是demo1设置的projectName
- 再调用
demo2
的设置session地址 localhost:8082/demo2/set_session,查看redis中的数据,已经被修改
- 再访问
demo1
查看session,展示的就是demo2
- 访问
-
至此SpringBoot使用Redis来实现Session共享设置成功
真正在项目实际应用中,是通过
Nginx
进行代理自动分配访问哪个项目,而不是想我这样手动修改请求的链接来查看效果