Spring Session实现分布式Session管理

2017-04-06  本文已影响562人  FX_SKY

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配置完毕了。

源码下载

spring-session-sample

参考资料

Spring Session

通过Spring Session实现新一代的Session管理

上一篇下一篇

猜你喜欢

热点阅读