ホームページ  >  記事  >  ウェブフロントエンド  >  Ajax セッションの失敗後にログイン ページにジャンプする方法を学習します。

Ajax セッションの失敗後にログイン ページにジャンプする方法を学習します。

coldplay.xixi
coldplay.xixi転載
2020-08-20 15:57:442390ブラウズ

Ajax セッションの失敗後にログイン ページにジャンプする方法を学習します。

[関連記事の推奨事項: ajax ビデオ チュートリアル ]

Struts アプリケーションでは、作成したリクエストは対応するインターセプターを通過します。 , 通常、ユーザー ログイン インターセプト (セッション失敗インターセプト) があり、一般的なリクエストの場合、セッションが失敗した場合はログイン ページにジャンプしますが、AJAX を使用してリクエストすると、ログイン ページの HTML コードが返されます。これは明らかに私たちが望んでいることではありません。どうすれば解決できるでしょうか?次の手順を参照してください:

1. インターセプタの作成

package com.xxx.planeap.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.xxx.common.contants.ConstantsKey;
import com.xxx.common.contants.SessionKey;
import com.xxx.planeap.domain.User;
import com.xxx.planeap.security.SecurityContextUtil;
/**
* 
* @author Goma OMA1989@YEAH.NET
* @version v1.0
* @since 2012-05-31
* 
*/
public class SecurityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
private Logger logger = Logger.getLogger(SecurityInterceptor.class);
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
String className = invocation.getAction().getClass().getName();
String action = className.substring(className.lastIndexOf(".")+1,className.length());
String actionName = invocation.getProxy().getActionName();
String result;
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String type = request.getHeader("X-Requested-With");
User user = (User) ActionContext.getContext().getSession().get(SessionKey.CURRENT_USER);
if (user == null) {
logger.debug("SECURITY CHECKED: NEED TO LOGIN");
if ("XMLHttpRequest".equalsIgnoreCase(type)) {// AJAX REQUEST PROCESS
response.setHeader("sessionstatus", ConstantsKey.MSG_TIME_OUT);
result = null;
} else {// NORMAL REQUEST PROCESS
result = ActionSupport.LOGIN;
}
} else {
logger.debug("SECURITY CHECKED: USER HAS LOGINED");
SecurityContextUtil.setCurrentUser(user);
boolean hanPerm = SecurityContextUtil.hasPerm(action, actionName);
logger.debug("SECURITY CHECKED: PERMISSION---"+action+"."+actionName+"="+hanPerm);
result = invocation.invoke();
}
return result;
}
}

2. グローバル AJAX リクエスト終了の定義処理メソッド

//全局的AJAX访问,处理AJAX清求时SESSION超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
//通过XMLHttpRequest取得响应头,sessionstatus 
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); 
if(sessionstatus=="timeout"){
//这里怎么处理在你,这里跳转的登录页面
window.location.replace(PlanEap.getActionURI("login"));
}
}
});

つまり、ajax がリクエストを送信するときに、インターセプトが表現を返した場合はジャンプし、それ以外の場合は通常の操作が実行されます。

関連する学習に関する推奨事項: JavaScript ビデオ チュートリアル

以上がAjax セッションの失敗後にログイン ページにジャンプする方法を学習します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。