Springsession分布式会话管理

一:spring-session 介绍
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"/>





猜你喜欢

转载自blog.csdn.net/qw463800202/article/details/79567907