美文网首页
Spring Session实现分布式Session管理

Spring Session实现分布式Session管理

作者: FX_SKY | 来源:发表于2017-04-06 19:39 被阅读562次

    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管理

    相关文章

      网友评论

          本文标题:Spring Session实现分布式Session管理

          本文链接:https://www.haomeiwen.com/subject/zagqattx.html