Как получить основную информацию из HttpSessionEvent в Spring Boot? - PullRequest
0 голосов
/ 05 июля 2019

Я использую класс javax.servlet.http.HttpSessionListener для прослушивания изменений сеанса в моем приложении Spring Boot

public interface HttpSessionListener extends EventListener {
    default void sessionCreated(HttpSessionEvent se) {
    }

    default void sessionDestroyed(HttpSessionEvent se) {
    }
}

Вопрос в том, как мне получить информацию о пользователе из HttpSessionEvent?

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

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

По умолчанию Spring Security сохраняет SecurityContext в сеансе под ключом, определенным HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY.Итак, если пользователь все еще вошел в систему, вы можете сделать:

@Override
void sessionDestroyed(HttpSessionEvent se) {
    HttpSession session = se.getSession();
    SecurityContext context = (SecurityContext) session.getAttribute
        (HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
    Authentication authentication = context.getAuthentication();
    // drill down from here, but could be authentication.getName()
}
0 голосов
/ 05 июля 2019

вы можете получить сеанс с помощью объекта httpEvent, а из сеанса вы можете получить информацию о текущем пользователе

se.getSession ()

...