2011-01-27 2 views
3

리디렉션는 IBM WebSphere 6.1 서버, 자바 JDK 1.5JQuery와 아약스 호출 및 j_security JQuery와 (최신) 사용

는 피클의 비트를 얻었다. 모든 AJAX 호출은 인증이 필요한 web.xml의 보안 제약 조건에 포함 된 URL에 대한 것입니다. 인증은 표준 양식 기반 j_security이므로 컨테이너 (WebSphere)가 보안/보호 된 URL에 대한 모든 요청에서 해당 호출을 가로 채고 인증이 양호한지를 확인하고 인증이 좋지 않은 경우 로그인 페이지로 자동 리다이렉트됩니다. 꽤 단순한/표준과 예상되는 오른쪽 나는 생각한다.

다음 코드를 살펴보십시오. 클라이언트의 인증 상태 (인증, 인증되지 않은 시간 초과)에 상관없이 해당 URL에 GET 호출 (또는 게시는 중요하지 않음)이 항상 200을 반환합니다. 그래서 우리가 서버가 반환하는 데이터를 평가하지 않는 한 리디렉션되지 않습니다.

아마도 내가 누락 되었습니까? 이것은 정말로 복잡하게 보입니다. 리디렉션 된 j_security인지를 확인한 유일한 신뢰할 수있는 방법은 서버에서 데이터를 가져 와서 j_password 필드에 대한 dom 검색을 수행하는 것입니다. 하지만 그게 정말 비효율적 인 것 같아. 왜냐하면 그게 내 응용 프로그램에서 AJAX 호출에 대해해야 할 일이다. 일부 AJAX 호출은 JSON을 반환하는 URL과 일부 HTML을 반환합니다.

$.ajax({ 
     type: 'GET', 
     url: '<c:url value="/secure/supersecretthingy.html"/>', 
     dataType: 'html', 
     data:{ 
      requestDate: requestDate 
     }, 
     beforeSend: function(request) { 
     }, 
     complete: function(request) { 
     },   
     success: function(data, textStatus, response) { 
      var ll = $('<div id="#wee" class=""></div>').html(data).find("#j_password").length; 
      //console.log(ll); 
      $("#wee").remove(); 
      if (ll != 0) { 
       //console.log('we timed out says websphere!'); 
       window.location = '<c:url value="${GLOBAL_AJAX_TIMEOUT_PAGE}" />'; 
      } else {   
       //console.log("not timed out"); 
       dialogDiv.html(data); 
      } 
      }, 
      error: function(xhr, textStatus, errorThrown) { 
       //console.log(errorThrown); 
      } 
    }); 

답변

2

같은 문제는 내가 그것을 처리하는 방법을 참조 당함 : How to handle authentication through AJAX with a java web app that uses form based login

+2

감사 svachon! 그것은 내가 거의 끝내었지만 약간 다르다. AJAX 호출 중 일부는 JSON 및 기타 HTML을 반환하므로 우리가 수행 한 작업은 Controllers에서 클라이언트 측에서 선택할 수있는 응답 헤더를 설정하는 것입니다. 헤더가 설정되어 있지 않으면 우리는 WebSphere의 j_security에 의해 방향이 바뀌 었음을 알았고 적절하게 처리 할 수 ​​있습니다. – tmeisenh

+0

컨트롤러에서 JSON을 반환하고 호출에서 dataType을 지정하지 않은 경우에만 수행해야하는 추가 작업이있었습니다. 이는 j_security가 요청을 인터셉트하면 websphere가 HTML을 반환하기 때문입니다. – tmeisenh