Spring에서 세션을 체크할때 보통 interceptor 를 씁니다.
지정된 URL 패턴일때 세션을 체크하여 로그인 화면으로 리다이렉트를 시켜주도록 구현을 하였다면
일반적인 form submit일때는 잘 동작합니다.
하지만 ajax 의 경우에는 다릅니다.
interceptor를 거치긴 하지만 바로 error 콜백함수를 호출하게 됩니다. 리다이렉트 시키지 않고 responseText 부분에 리다이렉트 페이지의 스트링이 오게 됩니다. 이럴때의 처리는 몇가지가 있습니다.
1. session 체크 함수
- ajax 로 session 이 살아있는지 체크를 하고 살아있다면 그 다음 ajax 호출을 합니다.
근데 이렇게 개발하는 건 정말 멍청한 짓입니다. 하지마세요.
2. Spring Security
참고 : http://lng1982.tistory.com/138 (간단한 세팅)
참고 : http://linuxism.tistory.com/671 (개념)
인증과 보안관련 프레임워크입니다. 설정과 이해가 까다롭긴 하지만 공부해서 적용하는게 훨씬 득. 개이득.
시큐리티 설정을 하면 인증정보가 Authentication 객체에 담기게 됩니다. 이 객체는 설정에 따라 HttpSession 에 담길 수도, 쿠키나 외부서버(redis 같은) 에 담길 수도 있습니다. 더이상 세션으로만 사용자 정보를 관리하는 것이 아닌 더 높은 수준의 보안설정을 할 수 있습니다.
(2016.01.29 기준 Spring Security 가 제일 나은듯)
3. Header 세팅
먼저 $.ajax() 호출 시 beforeSend 옵션에 header 정보를 세팅합니다.
beforeSend : function(xmlHttpRequest){
xmlHttpRequest.setRequestHeader("AJAX", "true"); // ajax 호출을 header에 기록
}
다음으로 interceptor에서 헤더정보를 확인.
String ajaxCall = (String) request.getHeader("AJAX");
ajaxCall 파라미터에 세팅한 "true"라는 문자열이 있으면 HttpServletResponse에 다음과 같이 세팅
response.sendError(500);
이 때 에러값은 int값으로 알맞게 정의하면 됩니다.
그리고 $.ajax() 의 error 콜백에 다음과 같이 정의합니다.
error:function(xhr, textStatus, error){
if(xhr.status=="500"){
alert("Login Session Expired");
location.href = "/";
}
}
서버에서 설정한 에러코드값(여기에서는 500)이 맞으면 로그인세션이 없다는 것으로서
index 페이지로 이동시켜주면 됩니다.
[출처] ajax 요청시 Session 체크방법|작성자 moonv11
'Programing > AJAX' 카테고리의 다른 글
IE만 가진 Jquery Cache 오류 (0) | 2016.11.24 |
---|