Spring HttpSession: разблокировать ресурсы на sessionDestroyed - PullRequest
0 голосов
/ 27 мая 2019

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

Во-первых, приветственный URL моего приложения - / application / start.Я определил контроллер:

@RequestMapping("/application/start")
public String applicationStart() { 
    return "forward:/start.html";
}

Я заметил, что этот запрос вызывается три раза при запуске приложения (даже до регистрации).Когда я заменил это на

@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/application/start").setViewName("/start.html");
    }

, оно вызывалось только один раз - после регистрации ("/ application / login").Более того, в первом случае было создано три сеанса - я создал класс HttpSessionListenerImpl, который реализует HttpSessionListener для его отслеживания.

Второе, что я хотел бы понять, - это разница между истечением сеанса и аннулированием,Из того, что я понимаю, сессия истекает, например.когда в течение некоторого времени нет активности пользователя или при выходе из системы.Но я не до конца понимаю вторую концепцию, когда она может состояться?Я заметил, что когда пользователь выходит из системы, внутри события sessionDestroyed SecurityContext хранит объект пользователя Authenticaiton.Но когда сеанс был уничтожен (признан недействительным?), Когда был достигнут ранее установленный в sessionCreated maxInactiveInterval, объект Authentication был равен нулю.Я считаю, что где-то я читал, что Authentication не должно быть нулевым.Так это ожидаемое поведение?Не следует ли создавать анонимную аутентификацию?Моя идея состояла в том, чтобы вызвать упомянутый запрос к базе данных, чтобы разблокировать все функциональные возможности, заблокированные пользователем внутри sessionDestroyed на основе Authentication объекта.Но в этом случае это не сработает.

Извините за длинный пост и заранее благодарю за помощь.

...