Я хочу обработать событие уничтожения сеанса и выполнить некоторую очистку. Чтобы сделать это, я создал SessionDestroyedEvent listener, но меня беспокоят две вещи:
При публикации события, связанного с удалением сеанса,
1) В кластерной среде все экземпляры прослушивают это событие, и они пытаются делать то же самое в одно и то же время. Как я могу предотвратить это?
2) Я могу найти имя пользователя с помощью этого (1) фрагмента кода, но он выглядит грязным. Есть ли какой-нибудь «чистый» способ найти имя пользователя?
Вот мой слушатель событий
@Component
class SessionDestroyEventListener implements ApplicationListener<SessionDestroyedEvent> {
@Override
public void onApplicationEvent(SessionDestroyedEvent event) {
(1)String username = ((SecurityContextImpl) event.getSession().getAttribute("SPRING_SECURITY_CONTEXT")).getAuthentication().getName();
//some code
logger.info("User session destoyed: {}", username);
}
}