2012-01-26 1 views
2

Когда сеанс аутсайта и клиент выполняет частичный рендеринг Ajax, Spring Security перенаправляет на страницу logOn, но перенаправление попадает в HttpXMLRequest и ничего не происходит, как ожидалось, но не желая.Как перенаправить на страницу входа в сеанс таймаута в Tomcat 7 с использованием JSF 2, праймстей и весной безопасности

Spring конфигурации:

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

Firebug показывает Ajax коммуникацию: enter image description here

+0

Это распространенная проблема среди всех сеансовых веб-приложений, использующих связь Ajax. Возможно, в javascript будет возможно сохранить временную метку, а затем установить таймер для отображения сообщения о тайм-ауте сеанса после желаемого периода времени. Задача состоит в том, чтобы обновить клиентский таймер после каждого асинхронного сообщения обратно на сервер. –

ответ

2

Чтобы переадресовать запрос JSF Ajax вам нужно XML следующим образом

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

Здесь XXX является URL вы хотите перенаправить произойдет.

При переадресации вызова ajax, отправленного весной, безопасность не выше, поэтому нет перенаправления или ожидаемого результата.

Чтобы получить желаемый результат, у вас есть фильтр для всех запросов jsf, пожалуйста, войдите в систему и проверьте сеанс, и если это действительно jsf ajax-вызов, проверяя заголовок «Faces-Request», его значение должно быть «partial/ajax», , Если сеанс истек и является запросом ajax, отправьте выше xml в качестве ответа.

Должно работать.

Этот link @ SO может помочь вам с весенним кодом безопасности, если фильтр не нужен.

Смежные вопросы