作者:简单的土豆

来源:www.jianshu.com/p/e4191997da56

前言

如果你正在使用Java开发Web应用,想必你对HttpSession非常熟悉,但我们知道HpptSession默认使用内存来管理Session,如果将应用横向扩展将会出现Session共享问题。

Spring Session提供了一套创建和管理Servlet HttpSession的方案,以此来解决Session共享的问题,更为重要的是在Spring Boot中使用它极其简单。

Session共享的问题

HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。如果我们将Web应用横向扩展搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被负载分发到两个不同的实例中去,如何保证不同实例间Session共享成为一个不得不解决的问题。

最简单的解决方法就是把Session数据保存到内存以外的一个统一的地方,例如Memcached/Redis中。那么问题又来了,如何替换掉Servlet容器创建和管理HttpSession的实现呢?

  1. 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。这方面其实早就有开源项目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暂时都只支持Tomcat6/Tomcat7。
  2. 配置Nginx的负载均衡算法为ip_hash,这样每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的Session共享问题
  3. 如果你使用Shiro管理Session,可以用Redis来实现Shiro 的SessionDao接口,这样Session便归Redis保管。
  4. 设计一个Filter,利用HttpServletRequestWrapper,实现自己的 getSession()方法,接管创建和管理Session数据的工作。Spring-Session就是通过这样的思路实现的。

在Spring Boot中 集成 Spring Session

Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast来存储Session,这里以Redis为例。

1、引入Maven依赖(本示例使用dependencyManagement,如果你没有使用它请添加标签)

                    org.springframework.boot            spring-boot-starter-data-redis                            org.springframework.session            spring-session        

2、配置你的Spring Application,将你的application.properties加入以下配置。

spring.session.store-type=redis

仅此两步,便集成完毕,整个过程完全无痛、无感~

注意:如果你的Redis服务器不是使用本地默认配置(localhost:6379),需要配置你的Redis,如何配置?看这里。

我们来验证一下~

果然,Http Session已被Spring Session进行包装,我们可以依旧使用Http Session的API来进行编程。

Cookies 也正常创建,Key为SESSION。

127.0.0.1:6379> keys *1) "spring:session:sessions:083706a8-b2d8-480c-8b88-eafc798e7269"2) "spring:session:sessions:expires:083706a8-b2d8-480c-8b88-eafc798e7269"3) "spring:session:expirations:1490263320000"

使用redis-cli查看,发现Redis中也已保存相关数据。

参考

https://link.jianshu.com/?t=http://docs.spring.io/spring-session/docs/current/reference/html5/

在共享dll中使用mfc_在SpringBoot中使用Spring Session解决分布式会话共享问题相关推荐

  1. 在SpringBoot中使用Spring Session解决分布式会话共享问题

    在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...

  2. SpringBoot 2 整合 Spring Session 最简操作

    SpringBoot 2 整合 SpringSession 前言 Spring Session 介绍 SpringBoot 快速整合 Spring Session Spring Session 测试 ...

  3. ElementUI中显示是否以及SpringBoot中怎样存储实体类属性和数据库怎样设计字段

    场景 Vue+ElementUI+SpringBoot+Mysql 需要设计一些属性为是否,即只有两个选择的属性字段. 注: 博客: https://blog.csdn.net/badao_liuma ...

  4. 利用spring session解决共享Session问题

    https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...

  5. springboot中获得app_在SpringBoot中读取环境变量

    What is the best way to read environment variables in SpringBoot? In Java I did it using: String foo ...

  6. 【SpringBoot】18、SpringBoot中使用Session共享实现分布式部署

    前言:我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作 但是分布式部署的时候, ...

  7. SpringBoot中Bean按条件装配

    @Conditional条件装配 @Conditional是Spring Framework提供的一个核心功能注解,这个注解的作用是提供自动装配的条件限制,一般我们在用@Configuration,@ ...

  8. SpringBoot中AOP实现落地——Filter(过滤器)、Intercepter(拦截器)、Aspect(Spring AOP)

    文章目录 一.一切要从Servlet说起 1.1什么是Servlet 1.2为什么需要Servlet 1.3Servlet如何响应用户请求 1.4Servlet与Tomcat处理请求的流程 1.5Se ...

  9. 使用spring session+redis技术,解决负载均衡下的session共享问题

    使用spring session+redis技术,解决负载均衡下的session共享问题 参考文章: (1)使用spring session+redis技术,解决负载均衡下的session共享问题 ( ...

最新文章

  1. 少壮不努力,老大背单词
  2. 小博老师解析Java核心技术 ——JDBC数据库操作类封装
  3. 从输入网址到网页显示过程
  4. 也说电影《魔比斯环》
  5. 如何卸载mysql server 2005_如何卸载SQL Server 2005
  6. STM32学习——高级定时器
  7. HTML元素 - input type=hidden
  8. 能够编辑excel的python 软件有哪些_生产管理系统有哪些
  9. 国外经济学期刊分类汇总(经济学、统计学、精算学和金融计量方面)
  10. linux课程以及Linux主要学习哪些内容
  11. 小麦苗的常用代码--常用命令(仅限自己使用)--下
  12. Java计算当前时间,结合时区
  13. IuCS IuPS IuR IuB Uu接口示意图
  14. scrapy抓取的中文结果乱码解决办法
  15. svn服务器现存的库文件导入,svn导入版本库及相关知识
  16. 计算机操作系统教程 2 操作系统概述
  17. “一52岁程序员老将”,看完这“208道精品面试题”;最终成功跳槽阿里P8,从此平步青云,飞黄腾达
  18. 天津九博科技---爱在九博感恩最美
  19. 计算机视觉---常见的颜色空间
  20. php singlewidget_天天团购整理笔记一

热门文章

  1. SAP Spartacus 页面标题的更改机制 - 谁动了我的页面标题?
  2. SAP Analytics Cloud里显示在图表里的描述信息更改
  3. 如何配置SAP Analytics Cloud到SAP Cloud for Customer的连接
  4. SAP Engagement Center的ShellCarousel控件control
  5. SAP CRM Fiori My note应用的note header设计
  6. difference between SAP UI5 RTL false and true - set breakpoint to change behavior
  7. where does the route config data of extension component come from
  8. SAP Marketing 和SAP marketing Cloud的区别
  9. 继承的CSS类在Chrome开发者工具里的显示
  10. how to get context node reference CN0X from view controller reference