달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

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 페이지로 이동시켜주면 됩니다.


'Programing > AJAX' 카테고리의 다른 글

IE만 가진 Jquery Cache 오류  (0) 2016.11.24
Posted by 한설림
|