인터셉터에 의한 Ajax 요청 차단 해결
인터셉터 구성:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception { //获取判定登陆的session是否存在 String token = (String) request.getSession().getAttribute("token"); String postId = (String) request.getSession().getAttribute("postId"); if(token == null || token == ""){ String XRequested =request.getHeader("X-Requested-With"); if("XMLHttpRequest".equals(XRequested)){ response.getWriter().write("IsAjax"); }else{ response.sendRedirect("/m-web/user/toLogin"); } return false; } if(postId == null || postId == ""){ String XRequested =request.getHeader("X-Requested-With"); if("XMLHttpRequest".equals(XRequested)){ response.getWriter().write("IsAjax"); }else{ response.sendRedirect("/m-web/user/toLogin"); } return false; } return true; }
1. 문자열 XRequested =request.getHeader("X-Requested-With " ) 값을 사용하여 Ajax 요청인지 확인하는 것이 목적입니다.
2. response.getWriter().write("IsAjax"); ajax에서 판단할 수 있도록 응답 데이터를 작성합니다.
판단하는 방법에는 두 가지가 있습니다. 방법 :
1) ajax에서 직접 판단(권장하지 않음)
success:function(data){ if(data == "IsAjax"){ window.location.href="m-web/user/toLogin" return; } }
2) ajax 소스코드를 변경한 후 압축하여 전역적으로 수정(권장)
if ( isSuccess ) {// if no content if ( status === 204 || s.type === "HEAD" ) { statusText = "nocontent"; // if not modified } else if ( status === 304 ) { statusText = "notmodified"; // If we have data, let's convert it } else { statusText = response.state; success = response.data; error = response.error; isSuccess = !error; //解决ajax拦截问题 var result = responses.text; if(result.indexOf("IsAjax")>=0){ window.location.href="m-web/user/toLogin"; return; } } }
읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!
인터셉터가 Ajax 요청을 가로채는 자세한 예는 PHP 중국어 웹사이트의 관련 기사를 참고하세요!
관련 기사:
JS를 통한 전역 Ajax 요청 인스턴스 분석 가로채기