2012-01-26 1 views
2

세션 시간이 초과되고 클라이언트가 Ajax 부분 렌더링을 수행하면 Spring Security는 logOn 페이지로 리다이렉트하지만 HttpXMLRequest 예상대로, 그러나 원하지 않는대로 아무 일도 일어나지 않습니다.JSF 2, Primefaces 및 Spring Security를 ​​사용하여 Tomcat 7에서 세션 시간 초과로 로그온 페이지로 리디렉션

봄 설정 :

<sec:session-management invalid-session-url="/page/start.jsf"> 
    <sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/> 
</sec:session-management> 

이 방화범이 아약스 COMUNICATION 보여줍니다 enter image description here

+0

이것은 Ajax 통신을 사용하는 모든 세션 기반 웹 응용 프로그램에서 자주 발생하는 문제입니다. 아마도 자바 스크립트에서 타임 스탬프를 유지하고 원하는 시간 후에 세션 시간 초과 메시지를 표시하도록 타이머를 설정하는 것이 가능할 것입니다. 문제는 모든 비동기 포스트가 서버로 돌아간 후에 클라이언트 타이머를 업데이트하는 것입니다. –

답변

2

이 XXX 여기

<?xml version="1.0" encoding="UTF-8"?> 
<partial-response> 
     <redirect url="XXX"> 
     </redirect> 
</partial-response> 

을 다음과 같이 XML을 필요 JSF 아약스 요청을 리디렉션하려면 리디렉션 할 URL입니다 일어날 것입니다.

스프링 보안으로 전송 된 ajax 통화 리디렉션은 위와 같지 않으므로 리디렉션 또는 예상 결과가 없습니다.

원하는 결과를 얻으려면 모든 jsf 요청에 대한 필터가 있어야합니다. 로그인 페이지와 체크 세션이 유효하고 헤더 "Faces-Request"를 확인하여 실제로 jsf 아약스 호출 인 경우 해당 값은 "partial/ajax"이어야합니다. . 세션이 만료되었고 ajax 요청이 xml보다 높으면 응답으로 보냅니다.

제대로 작동합니다.

link @ SO은 필터가 필요없는 경우 봄 보안 코드를 제공합니다.