Я хотел бы рассмотреть следующую проблему с точки зрения управления сессиями.Пользователь может получить доступ к нескольким функциям в приложении.Но некоторые из них могут быть доступны только одному пользователю одновременно.Чтобы упростить, я сохраняю, какая функциональность заблокирована каким пользователем в таблице базы данных.Когда пользователь выходит из системы, закрывает браузер и т. Д., Приложение должно вызвать запрос к базе данных, чтобы освободить ресурс.Это связано с темой управления сессиями, которая является новой для меня, и я столкнулся с несколькими вещами.
Во-первых, приветственный 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
объекта.Но в этом случае это не сработает.
Извините за длинный пост и заранее благодарю за помощь.