在我的应用程序中,我有一个invalid-session-url
,我想知道是否可以在 中获取用户名invalid-session-url
?如果是这样,请告知如何做到这一点。
1 回答
是的,有可能。当用户通过身份验证时,您可以将带有用户名值的 cookie 发送到用户的 Web 浏览器。当会话过期时,您仍然可以访问该 cookie。您需要做的就是将其生命周期设置为足够长。
您可以实现自己的Filter
. 我建议扩展UsernamePasswordAuthenticationFilter
. 覆盖Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
使您可以访问 cookie - 您可以使用HttpServletResponse.addCookie(Cookie cookie)
.
您可以轻松注入自己的过滤器。有关配置的更多信息:http: //static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-custom-filter
还要考虑到发送这样的 cookie 可能是不安全的。我没有看到任何其他方式来完成你想要的。但是您可以通过配置轻松提高此解决方案的安全性LogoutHandler
。这个接口有一个实现CookieClearingLogoutHandler
。当用户决定手动注销时,您可以使用它来清除该 cookie。
<bean id="cookieClearingLogoutHandler" class="org.springframework.security.web.authentication.logout.CookieClearingLogoutHandler">
<constructor-arg>
<!-- Names of the cookies you want to remove when user logs out -->
<list>
<value>username</value>
</list>
</constructor-arg>
</bean>
<bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
<constructor-arg value="/login"/>
<constructor-arg>
<array>
<ref local="securityContextLogoutHandler"/>
<!-- Inject it -->
<ref local="cookieClearingLogoutHandler"/>
</array>
</constructor-arg>
<property name="filterProcessesUrl" value="/logout"/>
</bean>