ホームページ >ウェブフロントエンド >jsチュートリアル >Ajax+Session が失敗した後、すぐにログイン ページにジャンプする

Ajax+Session が失敗した後、すぐにログイン ページにジャンプする

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-04 14:09:161810ブラウズ

今回はAjax+Sessionが失敗した直後にログインページに飛ぶための注意事項を紹介します。実際のケースを見てみましょう。

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"));
}
}
});

このケースを読んだ後、あなたはメソッドをマスターしたと思います。記事、もっとエキサイティングな情報を求めてお越しください。 php 中国語 Web サイトの他の関連記事にも注目してください。

推奨読書:

Ajaxの内部値が外部から呼び出せない問題の解決策

HTML5+ajaxでプレビュー画像効果を作成する方法

以上がAjax+Session が失敗した後、すぐにログイン ページにジャンプするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。