область применения с истекшим сроком действия сеанса struts2

#security #session #struts2 #interceptor

#Безопасность #сеанс #struts2 #перехватчик

Вопрос:

Мое приложение использует struts2 spring hibernate, и я использовал некоторую систему session-interceptor-login-authorization, и она работает нормально, теперь, когда я пытаюсь реализовать часть с истекшим сроком действия, я сталкиваюсь с проблемами: сначала перехватчик сеанса проверяет каждый запрос, чтобы узнать, находится ли пользователь в сеансе, если нет, то его перенаправляют на страницу входа, в противном случае его пропускают через запрошенное действие.

  • итак, если пользователь только что запустил приложение, появляется страница входа в систему

  • если у сеанса есть тайм-аут из-за свойства session-timeout в web.xml затем он перенаправляется на страницу входа в систему

Теперь у меня был запрос на отображение сообщения с истекшим сроком действия сеанса. Итак, я решил использовать область приложения и установить некоторые переменные, такие как UserLoggedIn, а теперь вернемся к перехватчику, я могу проверить, находится ли пользователь в сеансе, и если его значение равно нулю, проверьте область приложения для переменной UserLoggedIn, так что, если он основан, то срок действия сеанса истек (sessionExpired.jsp), в противном случае login.jsp. проблема в том, что всякий раз, когда я закрываю браузер и снова открываю его, область приложения все еще там и переменная UserLoggedIn с ним, так что, допустим, я хочу запустить браузер и мое приложение, так что перехватчик сеанса сработал, оно не находит пользователя в сеансе Отлично!! но он обнаружил переменную UserLoggedIn, которая сообщает, что это не новый запуск, поэтому появляется сообщение об истечении срока действия сеанса. Я знаю, что это немного сбивает с толку, я не уверен, правильный ли это способ сделать это с истекшим сроком действия сеанса; это моя первая попытка.

любые советы, альтернативные методы и т.д. Будут действительно оценены

pd: Я знаю, что есть лучшие подходы к защите вашего приложения, такие как spring Security, я посвятил 2 дня, но потерпел неудачу, и из-за фактора времени я не могу продолжать пытаться это сделать

Ответ №1:

Возможно, было бы проще перенести время ожидания сеанса в сам перехватчик, то есть каждый раз, когда используется перехватчик, он будет устанавливать значение времени для пользователя, если значение времени между вызовами слишком велико, вы будете перенаправлены на страницу тайм-аута сеанса. В конце концов, именно сеанс сообщает вам, что он устарел, поэтому вы должны быть в состоянии избежать логики уровня приложения.

Комментарии:

1. Спасибо за ответ, есть ли какая-либо специальная библиотека, которую я должен использовать для тайм-аута сервлета или просто реализации adhoc и проверить, превышает ли это значение значение x, когда перехватчик снова срабатывает, чтобы установить timeot?

2. Я бы выбрал указанную вами реализацию adhoc. Когда пользователь входит в систему, вы вводите некоторый идентификатор для этого пользователя в сеанс, затем вы могли бы ввести значение временной метки в сеанс или, возможно, в базу данных (если у вас также есть шапка администратора базы данных, почему бы и нет). С другой стороны, если бы вы поместили данные в базу данных, вы могли бы легко создать страницу администрирования «Кто зарегистрировался» и, возможно, включить некоторые показатели использования =) Это было бы полезно для тестирования, а руководство любит «инструменты через плечо».