Spring Security: проблема с кнопкой возврата - PullRequest
0 голосов
/ 19 июля 2011

Я пытаюсь использовать функцию выхода из системы, предоставляемую Spring security.

Выход работает нормально. Сеанс становится недействительным (путем вызова метода logout в SecurityContextLogoutHandler классе). Пользователь перенаправлен на страницу входа.

Однако, когда я нажимаю кнопку «Назад», я вижу приведенный ниже код с действительным идентификатором сеанса. req.getRequestedSessionId () имеет значение НЕ ноль. A Новый сеанс создан.

      if (req.getRequestedSessionId() != null && 
            !req.isRequestedSessionIdValid())
        {
           chain.doFilter(request, response);
           return;
        }

У нас также есть следующий код в LogoutFilter .

          HttpServletResponse resp = (HttpServletResponse) res;
        resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
        resp.setHeader("Last-Modified", new Date().toString());
        resp.setHeader("Cache-Control", "no-store, no-cache,
                                    must-revalidate, max-age=0, 
                                    post-check=0, pre-check=0");
        resp.setHeader("Pragma", "no-cache");

Это какая-то проблема с браузером? Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 20 июля 2011

Один из возможных способов выполнить эту проверку, вероятно, состоит в проверке SecurityContext вместо HttpSession в вашем фильтре.

0 голосов
/ 19 июля 2011

API сервлета имеет два метода для получения сеанса из запроса:

getSession ()

и

getSession (логическое создание)

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

Сказав это, я думаю, что это не большая проблема. Пустой сеанс обычно не влияет на безопасность приложения или что-либо еще (кроме небольшого объема памяти).


EDIT:

Возможно, что во время процедуры выхода из системы некоторое перенаправление вызвало другой запрос, который установил новый сеанс. Если вы действительно хотите отследить его, используйте firebug или аналогичный инструмент для отслеживания всех запросов в последовательности выхода из системы и сравнения файлов cookie jsessionid по каждому из запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...