>  기사  >  웹 프론트엔드  >  Ajax+Session이 실패하면 즉시 로그인 페이지로 이동합니다.

Ajax+Session이 실패하면 즉시 로그인 페이지로 이동합니다.

php中世界最好的语言
php中世界最好的语言원래의
2018-04-04 14:09:161789검색

이번에는 Ajax+Session이 실패한 후 즉시 로그인 페이지로 이동할 수 있는 Notes를 가져오겠습니다.

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 중국어 웹사이트에서 다른 관련 기사도 주목하세요!

추천 자료:

Ajax 내부 값을 외부에서 호출할 수 없는 문제에 대한 솔루션

HTML5+ajax로 미리보기 이미지 효과를 만드는 방법

위 내용은 Ajax+Session이 실패하면 즉시 로그인 페이지로 이동합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.