在Spring Boot中使用Spring Session解决分布式会话共享问题
2017-08-08 09:20
761 查看
如果你正在使用Java开发Web应用,想必你对HttpSession非常熟悉,但我们知道HpptSession默认使用内存来管理Session,如果将应用横向扩展将会出现Session共享问题。
Spring Session提供了一套创建和管理Servlet HttpSession的方案,以此来解决Session共享的问题,更为重要的是在Spring Boot中使用它极其简单。
利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。这方面其实早就有开源项目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暂时都只支持Tomcat6/Tomcat7。
配置Nginx的负载均衡算法为ip_hash,这样每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的Session共享问题
如果你使用Shiro管理Session,可以用Redis来实现Shiro 的SessionDao接口,这样Session便归Redis保管。
设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,接管创建和管理Session数据的工作。Spring-Session就是通过这样的思路实现的。
Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast来存储Session,这里以Redis为例。
引入Maven依赖(本示例使用dependencyManagement,如果你没有使用它请添加<version>标签)
配置你的Spring Application,将你的application.properties加入以下配置。
仅此两步,便集成完毕,整个过程完全无痛、无感~
注意:如果你的Redis服务器不是使用本地默认配置(localhost:6379),需要配置你的Redis,如何配置?看这里。
我们来验证一下~
果然,Http Session已被Spring Session进行包装,我们可以依旧使用Http Session的API来进行编程。
Cookies 也正常创建,Key为SESSION。
使用redis-cli查看,发现Redis中也已保存相关数据。
Spring Session提供了一套创建和管理Servlet HttpSession的方案,以此来解决Session共享的问题,更为重要的是在Spring Boot中使用它极其简单。
利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。这方面其实早就有开源项目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暂时都只支持Tomcat6/Tomcat7。
配置Nginx的负载均衡算法为ip_hash,这样每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的Session共享问题
如果你使用Shiro管理Session,可以用Redis来实现Shiro 的SessionDao接口,这样Session便归Redis保管。
设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,接管创建和管理Session数据的工作。Spring-Session就是通过这样的思路实现的。
Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast来存储Session,这里以Redis为例。
引入Maven依赖(本示例使用dependencyManagement,如果你没有使用它请添加<version>标签)
配置你的Spring Application,将你的application.properties加入以下配置。
仅此两步,便集成完毕,整个过程完全无痛、无感~
注意:如果你的Redis服务器不是使用本地默认配置(localhost:6379),需要配置你的Redis,如何配置?看这里。
我们来验证一下~
果然,Http Session已被Spring Session进行包装,我们可以依旧使用Http Session的API来进行编程。
Cookies 也正常创建,Key为SESSION。
使用redis-cli查看,发现Redis中也已保存相关数据。
相关文章推荐
- spring boot--整合spring session实现session共享以及cookie丢失问题解决
- 【springboot】 spring session 分布式会话共享
- spring boot 项目增加flyway的使用遇到问题解决
- spring boot新手教程之使用FastJson解析JSON数据以及解决返回中文乱码问题
- 使用Spring Session和Redis解决分布式Session跨域共享问题
- 解决使用Spring Boot、Multipartfile上传文件路径错误问题
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
- Spring Boot使用CORS解决跨域问题
- 多种方式解决spring boot swagger ui使用 nginx 部署后无法使用问题
- 解决使用Spring Boot、Multipartfile上传文件路径错误问题
- 使用eclipse构建springboot项目的解决的一些问题
- 详解springboot中redis的使用和分布式session共享问题
- SpringBoot项目使用视图解析器解决Circular view path 问题
- Maven使用package打包Spring Boot时出现:Unable to find a single main class from the following candidates的问题解决
- 解决maven工程中使用spring-boot后导致的profile多环境配置失效的问题
- Spring Boot入门——JDBCTemplate使用及其相关问题解决
- spring session和redis集群打造分布式会话使用方案及错误解决
- Spring整合Spring Session,用redis解决分布式session共享问题
- spring boot学习5之session+redis解决session共享问题