【추천 관련 기사: ajax 비디오 튜토리얼】
Struts 애플리케이션에서 우리가 요청하는 것은 해당 인터셉터에 의해 처리됩니다. 일반적으로 사용자 로그인 차단(세션 실패 차단)이 발생합니다. 요청하면 세션이 실패하면 로그인 페이지로 이동합니다. 그러나 AJAX를 사용하여 요청하면 이는 확실히 우리가 원하는 것이 아니므로 어떻게 해결합니까? 다음 단계를 참조하세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!