一:spring-session 介绍
1.简介
session一直都是我们做集群时需要解决的一个难题,过去我们可以从serlvet容器上解决,比如开源servlet容器-tomcat提供的tomcat-redis-session-manager、memcached-session-manager。
或者通过nginx之类的负载均衡做ip_hash,路由到特定的服务器上..
需要加入下面一行配置
1.简介
session一直都是我们做集群时需要解决的一个难题,过去我们可以从serlvet容器上解决,比如开源servlet容器-tomcat提供的tomcat-redis-session-manager、memcached-session-manager。
或者通过nginx之类的负载均衡做ip_hash,路由到特定的服务器上..
但是这两种办法都存在弊端。
2.支持功能
1)轻易把session存储到第三方存储容器,框架提供了redis、jvm的map、mongo、gemfire、hazelcast、jdbc等多种存储session的容器的方式。
2)同一个浏览器同一个网站,支持多个session问题。
3)Restful API,不依赖于cookie。可通过header来传递jessionID
4)WebSocket和spring-session结合,同步生命周期管理。
3.使用方式
1)引入依赖jar包
如redis
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
或者mongodb
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-mongo</artifactId> <version>1.3.1.RELEASE</version> <type>pom</type> </dependency>
注意这里使用哪个存储容器,还需要在spring配置对应的连接,如mongo
<mongo:mongo-client host="${mongodb.servers}" port="${mongodb.port}" credentials="${mongodb.credentials}" id="mongo"> <mongo:client-options write-concern="SAFE" connections-per-host="10"/> </mongo:mongo-client>
<!-- 定义基于mongo的spring session配置 --> <bean class="org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration"> <property name="maxInactiveIntervalInSeconds" value="1800"/> <!--<property name="cookieSerializer" ref="cookieSerializer"/>--> </bean>注意:如果这里浏览器禁用了session,我们的springsession也针对这个问题做了处理,可以将sessionid存于httpheader中,
需要加入下面一行配置
<!-- 替代默认使用cookie,这里使用的是httpheader -->
<bean id="httpSessonStrategy" class="org.springframework.session.web.http.HeaderHttpSessionStrategy"/>
同时将这个配置加入session管理器中
<property name="httpSessionStrategy" ref="httpSessonStrategy"/>