【发布时间】:2016-07-17 01:43:05
【问题描述】:
我正在考虑将用户会话从应用程序级别移动到 Redis 实例。我相信我已根据文档 (http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession) 正确设置了所有内容,但我没有看到我所期望的行为并且认为我在某个地方错过了一步。
应用程序当前使用的是 HttpSession,所以我只是在上下文中添加了以下内容:
<context:annotation-config/>
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
<beans:bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<beans:bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="HOSTNAME" p:port="6379" />
在 web.xml 中添加了以下内容:
<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>
应用程序可以很好地构建、部署和加载页面,但是当我查看页面上的 cookie 时,我同时拥有 JSESSIONID 和 SESSION。我知道 JSESSIONID 被 Spring Security 使用,看起来 SESSION 被 Spring Session 使用。当我查看 redis 内部时,看起来 SESSION 是正在存储的。
另一个问题是自定义会话对象(使用 session.setAttribute 添加)没有显示在会话中。会话中显示的唯一内容是登录后,并且是 SPRING_SECURITY_CONTEXT 对象。当我删除 Spring Session 过滤器时,这些对象被添加到会话中就好了。
这是正常行为,还是因为我的设置有一些奇怪的冲突?
【问题讨论】:
标签: spring redis spring-session