Недействительный весенний сеанс безопасности - PullRequest
6 голосов
/ 06 января 2011

Мне нужно сделать недействительным (или пнуть) сеанс пользователя.приложение ограничивает вход в систему только одним пользователем на контейнер.

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

, но SessionContextHolder для этого пользователя, который был удален, все еще.поэтому у них все еще есть те же права доступа к защищенной странице.

как сделать недействительной или удалить субъект SessionContextHolder из указанной информации реестра сеанса?

ps: в моем старом приложении я даю одну переменнуюв UserDomain (UserDetails), которые содержат HttpSession.и когда им нужно пнуть пользователя, я просто лишаю законной силы HttpSession от указанного UserDomain.но я не знаю, как это сделать весной (более вероятно, удалить принципала SessionContextHolder, чем HttpSession).реализация почти такая же, как весной SessionRegistryImpl.

Ответы [ 4 ]

11 голосов
/ 07 января 2011

Возможно, вы захотите рассмотреть Spring Security Concurrency Control.Вы можете настроить это так, чтобы ограничить число одновременных сеансов на пользователя и истечь (удалить) существующие сеансы, если это число превышено.

Управление сеансами Spring Security

Этофрагмент нашей конфигурации (Spring 3):

<http>
    ...
    <session-management>
        <concurrency-control max-sessions="1"/>
    </session-management>
    ...
</http>
7 голосов
/ 06 января 2011

Я думаю, это способ сделать это:

SecurityContextHolder.getContext().setAuthentication(null)

Из SecurityContext.setAuthentication(Authentication) Javadocs:

Изменяет текущую аутентификацию основной или удаляет информация для аутентификации.

Параметры: аутентификация
- новый Токен аутентификации или ноль, если нет дополнительная информация об аутентификации должен храниться

6 голосов
/ 21 марта 2014

Вы также можете сделать следующее, чтобы очистить сеанс SpringSecurity:

SecurityContextHolder.clearContext()
0 голосов
/ 19 сентября 2013

Это извлечено из моего application-security.xml

class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy"
        p:maximumSessions="1" <br>
                    **p:exceptionIfMaximumExceeded="true"** >
        <constructor-arg name="sessionRegistry" ref="sessionRegistry" />

попробуйте добавить строку жирным шрифтом после максимального числа сеансов

...