2015-03-12 6 views
0

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

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

Спасибо!

+0

Что вы подразумеваете под первым запросом, который истекает после истечения срока действия, после проверки того, что пользователь является частью целевой группы? Что вы хотите проверить здесь и что происходит после проверки этого в текущем сценарии? Кроме того, не могли бы вы помочь с вашими конфигурационными файлами безопасности и частями, где вы это проверяете? – user3247727

+0

Вот что я хотел бы достичь: при каждом (аутентифицированном) запросе информация, связанная с принципалом, извлекается, используется для определения того, подлежит ли этому основному лицу завершение сеанса, как описано выше (т.е. в целевом), и если да, проверьте возраст пользователя и аннулировать сеанс, если возраст превышает лимит. – jbelis

+0

Приложение не использует файлы конфигурации *. Конфигурация выполняется программно с использованием экземпляра WebSecurityConfigurer (см. Http://docs.spring.io/autorepo/docs/spring-security/4.0.0.M1/apidocs/org/springframework/security/config/annotation/web/configuration/ EnableWebSecurity.html). Я надеялся, что смогу расширить эту конфигурацию, указав обработчик/фильтр, вызываемый по каждому запросу после проверки сеанса. Но мне трудно найти соответствующую документацию. – jbelis

ответ

0

Хотя вы, безусловно, можете просто добавить обычный фильтр сервлета, который выполняется в самом конце цепи (или, по крайней мере, после стека фильтров Spring Security), где вы получаете SecurityContext и проверяете пользователя (потенциально выгружая пользователя например this или this), я предлагаю вам вместо этого просто изменить продолжительность сеанса для каждого пользователя. После успешного входа в систему (AuthenticationSuccessHandler - хорошее место) вы можете просто позвонить setMaxInactiveInterval в сеанс и дать ему другое значение в зависимости от роли пользователя. Это кажется мне намного более чистым, так как вам не нужно отдельно обрабатывать семантически равные фактические и принудительные случаи истечения срока действия/выхода из системы.

+0

Спасибо за продолжение. В этом случае мне все равно, активен ли пользователь или нет. Я просто хочу иметь возможность блокировать доступ пользователей через определенное время. Я закончил реализацию проверки в утилите разрешения пользователя, вызванной всеми контроллерами. – jbelis

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