一、说在前面

  1. spring mvc项目,使用nginx,tomcat部署。
  2. 之前没做session共享,而nginx采用sticky模块进行分发。

    但发现有时不能正确地指向同一台服务器,从而导致session丢失。

    一直不能很好地定位原因,于是有了做session共享的计划。

二、操作及配置

  • pom添加依赖
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
  • spring-session.xml配置
<context:annotation-config/>
<bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
<property name="maxInactiveIntervalInSeconds" value="3600" />
<property name="redisNamespace" value="web:xxxx:prod"/>
</bean>
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="127.0.0.1" />
<property name="port" value="6379" />
<property name="database" value="5" />
<property name="password" value="my_password" />
</bean>
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
  • web.xml配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-session.xml</param-value>
</context-param>
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

三、注意及说明

  1. 不加上

    static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"

    的话,有可能会因为redis权限不够导致以下报错:”ERR unknown command 'CONFIG'“
  2. pom dependency各版本地址: https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis
  3. 1.2版本起步要求spring4,2.x要求spring5

    由于项目本身spring版本的差异,spring-session-data-redis版本的不同可能会有方法参数不存在,无对应bean定义之类错误。请参考2中的地址尽量选择匹配的版本。
  4. 2.x以下版本,RedisHttpSessionConfiguration中,即使配置了redisNamespace参数,redisKey还是会有'spring:session:'前缀,无法去掉。而2.x版本,修复了此问题。
  5. web.xml中filter一定要叫'springSessionRepositoryFilter'这个名字,否则会报错。

    此filter配置要尽量放在前面,尤其是它之前的filter不能调用request.getSession()方法。
  6. 由于使用了maxInactiveIntervalInSeconds配置,由redis负责接管Session,原来web.xml里配置的Session超时时间就会失效了。
  7. 保存session对象默认使用JDK序列化方式,这就要求保存在session的对象都要实现Serializable接口。
  8. 保存session支持自定义方式,例如json。

使用spring-session共享springmvc项目的session的更多相关文章

  1. nodejs 项目的session验证

    原文:https://www.codexpedia.com/node-js/a-very-basic-session-auth-in-node-js-with-express-js/ -------- ...

  2. Apache和Tomcat 配置负载均衡(mod-proxy方式)-无session共享、无粘性session

    转:https://blog.csdn.net/wangjunjun2008/article/details/38268483 mod-proxy方式实现负载均衡是利用了Apache 2.x版本自带的 ...

  3. [转]同一个tomcat不同项目的session共享问题

    问题描述: session常常用来存储一些公共信息供不同页面访问,比如用户登录信息.访问同一个tomcat下的不同项目所创建的session是不一样的.自然地面临了如何共享session的问题. 解决 ...

  4. Silverlight调用网站项目的Session

    项目中遇到Silverlight调网站Session的问题了,试了几种方法,用这种方法获取到了,如果有不对不恰当的地方,还望各路大神给指正出来. 解决方法: 1.Silverlight调用网站的接口 ...

  5. 使用idea,springboot,springsession,redis实现分布式微服务的session 共享

    本次开发环境:idea2016.3.4 +jdk1.8+maven3.3.9+redis+springboot+jedis 本文中的项目使用Maven来管理项目依赖,使用Spring Session和 ...

  6. Spring Boot(十一)Redis集成从Docker安装到分布式Session共享

    一.简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API,Redis也是技术领域使用最为广泛的存储中间件,它是 ...

  7. Spring Session + Redis实现分布式Session共享

    发表于 2016-09-29 文章目录 1. Maven依赖 2. 配置Filter 3. Spring配置文件 4. 解决Redis云服务Unable to configure Redis to k ...

  8. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  9. Spring Cloud分布式Session共享实践

    通常情况下,Tomcat.Jetty等Servlet容器,会默认将Session保存在内存中.如果是单个服务器实例的应用,将Session保存在服务器内存中是一个非常好的方案.但是这种方案有一个缺点, ...

随机推荐

  1. 使用VS2015编译xlslib库

    环境: win7_x64,VS2015 开始: 一.下载xlslib库 xlslib-package-2.5.0.zip 解压到一个指定目录,如E:\library\xlslib-package-2. ...

  2. NFPA, UL

    Who or what is NFPA? NFPA (National Fire Protection Association) is an organization in the USA that ...

  3. 计算机图形学----基于3D图形开发技术 (韩正贤 著)

    第1章 游戏模型 第2章 顶点处理机制 第3章 光栅化操作 第4章 片元处理和输出合并 第5章 光照和着色 第6章 参数曲线和表面 第7章 着色器模型 第8章 图像纹理 第9章 凹凸贴图 第10章 高 ...

  4. zabbix和iptables的nat表结合使用

    A 机器要去访问C机器,但是无法直接访问到A可以访问到B机器,B机器可以访问到C机器这时候就可以再B机器设置nat,让A机器访问C机器 正好工作中zabbix server要监控2个http地址,缺无 ...

  5. Java泛型相关总结(上)

    最近在看<Java核心技术>泛型相关的部分,总结下. 泛型程序设计是什么? 泛型编程(generic programming)是计算机编程中的一种风格,类型通过参数指定.意味着编写的代码可 ...

  6. Ansible 批量修改密码

    客户要求每3个月修改一次主机密码.密码规则为客服提供的一串字符 xxxx + 主机后3位. 将需要登录主机添加到 Ansible. 将需要登录主机的公钥添加到 known_hosts ssh-keys ...

  7. (转)InnoDB与MyISAM引擎区别

    MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比 2015年06月25日 21:58:42 阅读数:1827更多 个人分类: mysql   1.MyISAM:默认表类型,它是基于传统 ...

  8. Schema、API Schema与MFn

    大部分知识都是相通的,Maya和USD在设计上有很多相似之处,USD的Schema粗看很难理解,但实际上与Maya的MFn有着异曲同工之处.这篇文章会简单介绍一下这两个知识点,做个对比,了解下它们在各 ...

  9. docker:构建nginx+php-fpm镜像(一):构建nginx自启动镜像

    步骤一:手动安装nginx环境,并记录全过程: #使用yum更新系统 yum -y update   #下面编译安装tengine,查看有哪些包需要安装 #安装wget包,用于获取安装软件包 yum ...

  10. tar.gz和tar.bz2

    Linux下常见压缩格式为tar.gz和tar.bz2,解压命令如下: .tar.gz tar -zxvf 文件名 .tar.bz2 tar -jxvf 文件名