mru*_*nak 6 spring-security spring-session
当尝试将 spring-session 添加到具有 spring-security 的现有 Spring MVC 项目时,我得到以下行为(编辑:tomcat 的 session-timeout 设置为 1 分钟以进行测试):
除此之外,一切似乎都按预期工作 - 会话在 redis 中持续存在并跨 webapp 重新启动,并且手动注销正确地使会话无效。
我的一些配置片段 - 这是 spring-security 的无效会话处理程序配置,这将导致过期的会话被重定向到登录页面:
...
<beans:bean id="sessionManagementFilter" class="org.springframework.security.web.session.SessionManagementFilter">
<beans:constructor-arg name="securityContextRepository">
<beans:bean class="org.springframework.security.web.context.HttpSessionSecurityContextRepository"/>
</beans:constructor-arg>
<beans:property name="invalidSessionStrategy">
<beans:bean class="my.CustomInvalidSessionStrategy"/>
</beans:property>
</beans:bean>
...
<http>
...
<custom-filter position="SESSION_MANAGEMENT_FILTER" ref="sessionManagementFilter"/>
...
<logout delete-cookies="true" invalidate-session="true" logout-url="/signout.html" success-handler-ref="logoutSuccessHandler"/>
</http>
Run Code Online (Sandbox Code Playgroud)
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>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
并且(之一)加载的 spring 上下文文件包含:
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
<bean class="org.springframework.security.web.session.HttpSessionEventPublisher"/>
<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"/>
Run Code Online (Sandbox Code Playgroud)
希望我只是错过了一些非常明显的东西!
编辑:我用于尝试的版本是spring-security-4.0.4.RELEASE和spring-session-1.1.1.RELEASE
使用 Redis 时会话超时配置如下:
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="10"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |