Spring Security. Исключение не активных пользователей Principals Session?

Приветствую уважаемые форумчане.

Скажите пожалуйста, вот я получаю всех активных пользователей на данный момент

import org.springframework.security.core.userdetails.User;

@Service
public class ActiveUserService {

    @Autowired
    SessionRegistry sessionRegistry;


    public List<String > getAllActiveUser(){


        List<Object> principals = sessionRegistry.getAllPrincipals();
        User[] users = (User[]) principals.toArray(new User[0]);

        return Arrays.stream(users).filter(user -> !sessionRegistry.getAllSessions(user, false)
                .isEmpty()).map(User::getUsername).collect(Collectors.toList());

    }

}


но, если пользователь покинул сессию, то есть вышел, то система всё ровно показывает его как активным.

Как сделать так, что бы при выходе, система переставала показывала его как активным?

https://github.com/romanych2021/TestSession
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Favorskij
@Favorskij Автор вопроса
Для того чтобы решить данную задачу, мне понадобилось создать всего лишь один класс.

package com.testsession.service;

import org.springframework.security.web.session.HttpSessionEventPublisher;
import org.springframework.web.WebApplicationInitializer;

import javax.servlet.ServletContext;

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
        container.addListener(new HttpSessionEventPublisher());
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xez
@xez
TL Junior Roo
У spring тайм-аут сессии по умолчанию - 30 минут.
Моя гипотеза - вы просто 30 минут не дождались.
Лучший способ удостовериться, что пользователь вышел: сделать кнопку "выйти" по которой будут чиститься данные сессии.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы