SpringSession優點html
關鍵點在於作到透明和兼容html5
基本環境需求java
進行使用Spring Session的話,首先的是已經安裝好的有一個 Redis服務器!web
添加項目依賴(最基本的依賴使用)redis
<!--Spring Session--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>1.3.0.RELEASE</version> <type>pom</type> </dependency>
(3)添加Spring配置文件spring
添加了必要的依賴以後,咱們須要建立相應的Spring配置。Spring配置是要建立一個Servlet過濾器,它用Spring Session支持的HttpSession實現來替換容器自己HttpSession實現。這一步也是Spring Session的核心。api
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="127.0.0.1"/>
<property name="port" value="6379"/>
<property name="password" value=""/>
</bean>
在web.xml中添加DelegatingFilterProxy(必定要放在自定義filter以前,否則會出現自定義filter中沒法獲取到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> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>
DelegatingFilterProxy將經過springSessionRepositoryFilter的名稱查找Bean並將其轉換爲過濾器。對於調用DelegatingFilterProxy的每一個請求,也將調用springSessionRepositoryFilter。服務器
使用工具查看Redis內容:session
對於分佈式環境Session跨域共享的問題,無論是使用開源的框架仍是使用本身開發的框架,都須要明白的一個問題是:在Tomcat容器中建立Session是一個很耗費內存的事情。所以,咱們在本身寫相似框架的時候,咱們必定要注意的是,並非Tomcat爲咱們建立好了Session以後,咱們首先獲取Session而後再上傳到Redis等進行存儲,而是直接有咱們本身建立Session,這一點是相當重要的!
關於Error creating bean with name ‘enableRedisKeyspaceNotificationsInitializer’錯誤的處理:
添加以下配置讓Spring Session再也不執行config命令
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
若是不添加的話,會報以下錯誤:
Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]:
Invocation of init method failed; nested exception is java.lang.IllegalStateException: Unable to configure Redis to keyspace notifications.
See http://docs.spring.io/spring-session/docs/current/reference/html5/#api-redisoperationssessionrepository-sessiondestroyedeventCaused by: redis.clients.jedis.exceptions.JedisDataException: ERR unknown command config