Java Web中Ajax请求Session超时的统一处理方案

作者:开源拾贝

时间:2026-10-21

浏览:107

本文介绍在Java Web开发中处理Ajax请求Session超时的方法。通过自定义Filter拦截带有x-requested-with头的请求,并在响应头中标记超时状态;前端利用$.ajaxSetup全局配置complete回调,检测该状态码后自动跳转至登录页,实现前后端一致的超时处理逻辑。

文章目录

Ajax Session超时处理背景

在Java Web开发场景中,普通页面的Session超时跳转通常易于处理,但针对Ajax异步请求的超时判断则需要特殊的处理机制。

首先,需要编写一个统一的过滤器(Filter)或拦截器,专门用于过滤和处理Ajax请求。以下示例以Java Servlet Filter为例进行说明。

后端Filter拦截实现


  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    HttpServletRequest servletRequest=(HttpServletRequest)request;
    HttpServletResponse servletResponse=(HttpServletResponse)response;
    // 判断是否是 Ajax 请求,因为 Ajax 请求会追加 x-requested-with=XMLHttpRequest
    if("XMLHttpRequest".equalsIgnoreCase(servletRequest.getHeader("x-requested-with"))){
      servletResponse.addHeader("sessionstatus", "timeout");
    }    
    // 后续代码省略......
  }

其次,在前端页面调用Ajax时,需要捕获返回结果并执行相应的超时处理逻辑。具体实现如下所示。

前端全局Ajax配置


// 全局的ajax访问,处理ajax清求时sesion超时
$.ajaxSetup({
  type: POST,
  contentType:"application/json;charset=utf-8",
  // 使用 complete 捕获结果,做超时处理
  complete: function (XMLHttpRequest, textStatus) {
    var data = XMLHttpRequest.responseText;
    if (data == "timeout") {
      if( window.top != window.self ){
        window.top.location = "${pageContext.request.contextPath}";
      }
    }
  }
});

核心逻辑在于通过检查请求头判断是否为Ajax请求。如果请求头中包含x-requested-with=XMLHttpRequest,则判定为Ajax请求,并在响应中添加自定义Header以标识Session超时状态。

这段JavaScript处理代码可以封装为一个独立方法,以便在其他模块中直接复用,提高代码的可维护性。

上述内容即为Web开发中Ajax Session超时处理的完整方案,供开发者参考使用。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章