使用Spring Session實現分散式的Session共享
阿新 • • 發佈:2019-01-09
之前在分散式環境下需要解決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" > <propertyname="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的操作,它沒有什麼修改,無侵入,裝飾者模式。理解的人自然理解,不理解的人就自行體會吧。