1. 程式人生 > >使用Spring Session實現分散式的Session共享

使用Spring Session實現分散式的Session共享

之前在分散式環境下需要解決session共享的問題,更多的時候我們是使用servlet容器例如tomcat提供的叢集配置來解決session的複製問題。今天介紹一種簡單的解決方案。

1

1. 新增依賴

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>1.2.0.RELEASE</version>
</dependency>

2. spring-mvc.xml配置檔案新增:

複製程式碼
    <!-- 將session放入redis -->
    <context:annotation-config/>
    <bean id="redisHttpSessionConfiguration"  class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
        <property 
name="maxInactiveIntervalInSeconds" value="120" /> </bean> <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <!-- redis 配置 --> <property name="hostName" value="192.168.0.48" /> <property name="port"
value="6379" /> </bean>
複製程式碼

3. web.xml新增

複製程式碼
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </context-param>
    <!-- 分散式Session共享Filter -->
    <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>
複製程式碼

這樣就可以實現分散式Session了。

注意:1.spring的這個配置檔案一定要寫在web.xml的<context-param>部分,寫在其他地方不行。

     2.filter的名字必須是springSessionRepositoryFilter

     3.如果使用了shiro,web.xml中一定要把<context-param>放在最前面,然後寫shiro的Filter配置,再寫spring-session的Filter配置。後面就是其他的編碼和servlet配置了。

個人理解:由於spring-session 只是將原生的session以指定的方式進行儲存,至於session的操作,它沒有什麼修改,無侵入,裝飾者模式。理解的人自然理解,不理解的人就自行體會吧。