在基于 Spring 的 Web 应用程序中处理会话过期事件

Posted

技术标签:

【中文标题】在基于 Spring 的 Web 应用程序中处理会话过期事件【英文标题】:handle session expired event in spring based web application 【发布时间】:2012-06-29 19:51:35 【问题描述】:

我在我的应用程序中使用 Spring 安全功能,但我发现当会话过期时,所有请求 ajax 都返回页面 login.jsp(不是重定向,在 http 响应中,它放置所有 html 内容)这是我的 webapp 的登录页面。 我在我的应用程序中使用了很多 ajax 请求,目标是返回某些错误代码,例如 510,而不是登录页面。

<session-management session-authentication-strategy-ref="example" /> 

没有无效会话 url 我试图使 invalid-session-url = "",不起作用。 非常感谢

【问题讨论】:

【参考方案1】:

使用自定义AuthenticationEntryPoint:

package com.example.spring.security
// imports here

public class AjaxAwareAuthenticationEntryPoint
     extends LoginUrlAuthenticationEntryPoint 

  public AjaxAwareAuthenticationEntryPoint(final String loginFormUrl) 
    super(loginFormUrl);
  

  @Override
  public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException)
      throws IOException, ServletException 

    if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) 
      response.sendError(403, "Forbidden");
     else 
      super.commence(request, response, authException);
    
  

定义一个bean并将其用作entry-point-ref in &lt;http&gt; element:

<http entry-point-ref="authenticationEntryPoint">
  <!-- more configuration here -->
</http>

<bean id="authenticationEntryPoint"
   class="com.example.spring.security.AjaxAwareAuthenticationEntryPoint">
 <constructor-arg value="/login.jsp"/>
</bean>

【讨论】:

以上是关于在基于 Spring 的 Web 应用程序中处理会话过期事件的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中处理货币值的最佳实践?

在基于 Spring 的 Web 应用程序中处理会话过期事件

基于 Spring 的 Web 应用程序的环境特定配置?

在视图控制器中处理发送给第一响应者的消息

Spring实战5-基于Spring构建Web应用

在基于 SPRING-BOOT JSP 的 web 应用程序中嵌入 VAADIN UI 的 HTTP 405