2016-07-10 4 views
2

У меня есть простое приложение безопасности весны с администрацией пользователя. Администратор должен иметь возможность создавать/обновлять/удалять пользователей в базе данных (через спящий режим).Весна безопасности удалить пользователя - сеанс все еще активен

Если пользователь обновляется, я перегрузочные аутентификации пользователя, который в данный момент вошел в это делается с помощью следующего кода (согласно this примеру).

SecurityContextHolder.getContext().setAuthentication(updatedAuthentication); 

Мой вопрос: Что могу ли я сделать , если пользователь удален? Если я удалю пользователя, уже активные сеансы остаются активными, и я не знаю, как их обновлять. Я все еще могу перейти на каждую страницу, на которую я мог пойти раньше.

Есть ли способ сказать весне, что сеанс должен быть пересмотрен или что-то в этом роде? Я пропустил что-нибудь важное?

ответ

1

По каждому запросу вы должны проверить свою базу данных на предмет существования Пользователя. Этапы:

  1. Получить идентификатор пользователя из сеанса, проверить его в базе данных или нет.
  2. Если нет в базе данных, недействительность сеанса и перенаправление на страницу входа еще раз.
  3. Оберните те, что находятся выше двух степей, в методе и позвоните по каждому запросу. (Если существует общий метод, используйте или создайте e Listener)

Также вы можете проверить следующую ссылку, если это поможет. http://forum.spring.io/forum/spring-projects/security/35809-how-to-let-admin-to-force-user-to-logout

Другая полезная ссылка http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#list-authenticated-principals

0

SecurityContextRepository

От Spring Security 3.0, задание загрузки и хранения контекста безопасности теперь делегированы отдельный интерфейс стратегии

Вы может предоставить NullSecurityContextRepository во избежание хранения информации контекста безопасности.

я сделал что-то вроде этого:

@EnableWebSecurity 
public class CustomSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     // Other security configuration... 

     http.securityContext().securityContextRepository(new NullSecurityContextRepository()); 
    } 

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