【问题标题】:Is it possible to get username/last visited page after session timeout会话超时后是否可以获取用户名/上次访问的页面
【发布时间】:2012-10-26 04:06:54
【问题描述】:

在我的应用程序中,我有一个invalid-session-url,我想知道是否可以在invalid-session-url 中获取用户名?如果是这样,请告知如何做到这一点。

【问题讨论】:

  • 我不这么认为.. 没有任何方法可以从过期会话中获取值

标签: java spring cookies spring-security httpresponse


【解决方案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>

【讨论】:

  • 如何在代码中获取该用户名?还有什么是 filterProcessesUrl ?是否可以在会话超时之前获取最后一页?
  • filterProcessesUrl 指定激活过滤器中操作的 URL。对于logoutFilter filterProcessesUrl 指定负责从用户获取请求以注销他/她的路径。当用户“点击”该 URL 时,他/她将退出。
  • 更多关于 Spring MVC 中的 cookie:blog.vulab.com/2012/04/05/…
  • 在这种情况下如何在我的 java 类中获取用户名?
  • 查看我在评论中发布的最后一个网址。
猜你喜欢
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多