ajaxリクエスト後にフィルタにリダイレクトする必要があり、フロントエンドページが正常にジャンプできない解決策について
2537 ワード
ajaxリクエストはリダイレクトをサポートせず、非同期で返された情報に基づいて、フロントエンドでページのリダイレクトを行うしかありません.
サービス側ブロックは、ユーザ情報の有無に応じてページがログインページにジャンプするか否かを行うようになり、以下の方法で実現できるようになった.
フィルタ内のコード
/**
//フロントエンドページの額処理
実はフロントエンドページで一度ページのジャンプが行われています
受益先:https://www.cnblogs.com/jpfss/p/9547977.html
サービス側ブロックは、ユーザ情報の有無に応じてページがログインページにジャンプするか否かを行うようになり、以下の方法で実現できるようになった.
フィルタ内のコード
@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