ajaxリクエスト後にフィルタにリダイレクトする必要があり、フロントエンドページが正常にジャンプできない解決策について


ajaxリクエストはリダイレクトをサポートせず、非同期で返された情報に基づいて、フロントエンドでページのリダイレクトを行うしかありません.
サービス側ブロックは、ユーザ情報の有無に応じてページがログインページにジャンプするか否かを行うようになり、以下の方法で実現できるようになった.
フィルタ内のコード
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;

    String token = request.getParameter("token");
    if(StrUtil.isBlank(token) || "null".equals(token)){
        //   ,         
        String redirectUrl = request.getContextPath()+"/login.html";
        //     
        redirect(request,response,redirectUrl);
        return;
    }
    filterChain.doFilter(request,response);
}

/**
 
/**
 *       (      )
 * @param request
 * @param response
 * @param redirectUrl
 * @throws IOException
 */
private void redirect(HttpServletRequest request,HttpServletResponse response,String redirectUrl) throws IOException{
    String ctx = request.getContextPath();
    if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){
        //   ajax  
        //  ajax     
        response.setHeader("REDIRECT", "redirect");
        //  ajax       
        response.setHeader("redirectUrl", redirectUrl);
        response.setStatus(HttpServletResponse.SC_FORBIDDEN);
    }else{
        response.sendRedirect(redirectUrl);
    }
}

 
//フロントエンドページの額処理
$.post({
   url:url,
   data:params,
   dataType:"json",

   complete:function(xhr,status){
      //           
      var REDIRECT = xhr.getResponseHeader("REDIRECT");
      if (REDIRECT == "redirect")
      {
         var win = window;
         while (win != win.top)
         {
            win = win.top;
         }
         //      login.html
         win.location.href = xhr.getResponseHeader("redirectUrl");
      }
   },
   success:function(data){
      if('${Constants.REQUEST_STATUS_SUCCESS}' == data.returnCode){
         window.location.href = "${ctx}/kbApp/index.html?token="+token;
         var randomStr = makeTimeRandomStr(5);
         // localStorage.setItem("loginKey",randomStr);
      }else{
         popupTips(data.returnMessage);
      }
   }
});

 
実はフロントエンドページで一度ページのジャンプが行われています
受益先:https://www.cnblogs.com/jpfss/p/9547977.html