Spring Session作为Spring 官方推荐的分布式session解决方案,它提供了一种独立于应用服务器的方案,这种方案能够在Servlet规范之内配置可插拔的session数据存储,不依赖于任何应用服务器的特定API。这就意味着Spring Session能够用于实现了servlet规范的所有应用服务器之中(Tomcat、Jetty、 WebSphere、WebLogic、JBoss等),它能够非常便利地在所有应用服务器中以完全相同的方式进行配置。我们还可以选择任意最适应需求的外部session数据存储,例如Redis、hazelcast、mongodb。
集成Spring Session
1、在pom.xml 中添加 Spring Session 依赖,如下:
<!--spring-session-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.1.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2、在applicationContext.xml中添加如下配置:
<!--spring session-->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="1800"></property>
</bean>
<bean class="org.springframework.session.web.http.DefaultCookieSerializer" >
<property name="cookieMaxAge" value="-1" />
<property name="useHttpOnlyCookie" value="true" />
<property name="cookieName" value="spring-session-redis" />
</bean>
<!-- redis -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="#{redis['redis.pool.maxTotal']}" />
<property name="maxIdle" value="#{redis['redis.pool.maxIdle']}" />
<property name="maxWaitMillis" value="#{redis['redis.pool.maxWaitMillis']}" />
<property name="testOnBorrow" value="#{redis['redis.pool.testOnBorrow']}" />
</bean>
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="#{redis['redis.host']}" />
<property name="port" value="#{redis['redis.port']}" />
<property name="password" value="#{redis['redis.password']}" />
<property name="timeout" value="#{redis['redis.timeout']}" />
<property name="usePool" value="true" />
<property name="poolConfig" ref="jedisPoolConfig" />
</bean>
其中,第一个bean org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration
才是spring-session需要用到的,这个bean中又会自动产生多个bean,用于相关操作,极大的简化了我们的配置项。其中有个比较重要的是springSessionRepositoryFilter,它将在下面的web.xml 代理filter中被调用到。
3、web.xml
<!-- spring session -->
<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>
到此,Spring Session配置完毕了。
网友评论