Как редактировать время выхода из системы в Spring Security - PullRequest
2 голосов
/ 07 июня 2011

Я пытаюсь выяснить, где находится функция временного выхода из системы световой безопасности Spring, и как отредактировать ее, используя мой собственный метод выхода из системы. Насколько я понимаю, существует редактируемая функция временного выхода из системы, я до сих пор не смог ее найти, и когда / если я это сделаю, я не уверен, как заставить ее использовать мою последовательность выхода из системы.

Спасибо, MirroredFate

РЕДАКТИРОВАТЬ ДЛЯ ЯРКОСТИ:

Это веб-приложение / сервлет. Я использую acegi security.

Я сейчас использую тайм-аут весенней сессии:

In web.xml:
<session-config>
    <session-timeout>5</session-timeout>
</session-config>

Мне нужен способ выполнения некоторого кода при наступлении этого тайм-аута. Однако я понятия не имею, как это сделать.

Если я не могу выполнить код с использованием этого метода, я понимаю, что у acegi есть способ сделать тайм-аут сеанса; Тем не менее, я понятия не имею, как это сделать. У меня уже есть возможность выполнить код при обычном выходе из системы с помощью acegi:

<security:logout invalidate-session="true"
                success-handler-ref="Logout"
                logout-url="/logout.html" />
</security:http>

Итак, по сути, как мне сделать то же самое либо с выходом по расписанию acegi, либо по истечении времени ожидания сеанса?

Ответы [ 2 ]

8 голосов
/ 08 июня 2011

HttpSessionListener может быть тем, что вы ищете.Проблема с зависимостью от управления сессиями Spring заключается в том, что если пользователь просто закрывает свой браузер без выхода из системы, то недействительный URL-адрес сеанса никогда не будет достигнут (потому что он никогда не сделает другой запрос).

Примерно так:

public class MySessionListner implements HttpSessionListener {
     public void sessionCreated(HttpSessionEvent se) {
          return; //or maybe do something, depends on what you need
     }

     public void sessionDestroyed(HttpSessionEvent se) {
          HttpSession session = se.getSession();
          //do whatever you need to do
     }
 }

Затем в web.xml:

 <listener>
      <listener-class>com.foo.MySessionListener</listener-class>
 </listener>

Таким образом, ваш код будет вызываться каждый раз, когда сеанс уничтожается, а не только тогда, когда пользователь пытается получить доступ к странице по истечении времени.из.Надеюсь, это поможет.

2 голосов
/ 07 июня 2011

Периодом ожидания сеанса управляет ваш сервер приложений (так же, как он установлен в web.xml). Обработка того, что происходит при истечении времени ожидания сеанса, может быть указана в Spring. Например, Spring 3.0 может указать, на какую страницу перенаправлять пользователя, когда он делает запрос после того, как его сеанс был признан недействительным. Увидеть ниже.

<?xml version="1.0" encoding="UTF-8"?>

<b:beans xmlns:b="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <sec:http auto-config="true" access-denied-page="/login">
            <sec:session-management invalid-session-url="/session-timeout" />
            <sec:anonymous enabled="true" />
            <sec:intercept-url ... />
            <sec:form-login ... />
            <sec:logout invalidate-session="true" logout-success-url="/login" />
        </sec:http>
    <!-- Other bean declarations --> 
</b:beans>
...