달력

32024  이전 다음

  • 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
  • 31

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 한설림
|

시스템 사용자께서 데이터 저장이 안된다는 문의를 받았다.

응? 그럴리가 크롬에서 확인하니깐 잘된다...

어라? IE에서 확인하니깐 안된다??  어라??


F12 누르고 개발자 모드로 보니깐 .... 

HttpRequest 결과가 304로?????  뭐지??? 

이미 서버의 메모리에 있던 값을 클라이언트에게 계속 던져주고 있다. 

200이 뜨란 말이야!! 새로 받아오라고!!




IE의 경우 ajax로 호출하는 URL이 동일하고 파라미터가 없거나 할 경우 매번 URL을 호출하는것이 아닌 Cache를 이용하여 지가 멋대로 결과값을 내보내 주고 있었다. (서버에 요청을 안한다...)


jquery 옵션을 찾아보니 cache 항목이 보인다. 해당 옵션은 default로 true로 설정되어 있는데, 해당 옵션을 false로 변경하면 IE에서 해당 오류가 사라진다.


"cache:false"를 ajaxSetup에 추가하거나 ajax 구문에 직접 넣으면 된다.


1
$.ajaxSetup({cache:false});


1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
      
    type : "GET",
    url : "test.jsp",
    dataType : "json",
    cache : false,
    error : function(){
    },
    success : function(json){
    }
      
});


Posted by 한설림
|