Выход из сервлета 3.0 не работает - PullRequest
4 голосов
/ 23 мая 2010

У меня проблема с функциями аутентификации Servlet 3.0:

С этим кодом в сервлете v3:

log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
log.info("===^===");
request.logout() ;
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
request.authenticate(response) ;
log.info("===v===");
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());

Я бы всегда ожидал увидеть окна имени пользователя / входа в систему из-за функции logout(). Вместо этого это, кажется, механизм «кэша», который заново заполняет учетные данные и отменяет мой выход из системы ...

Администратор

BASIC

=== ^ ===

нуль

1020 * нуль *

=== v ===

Администратор

BASIC

Это проблема с моим firefox или что-то, чего мне не хватает в коде сервлета?

Ответы [ 2 ]

4 голосов
/ 23 мая 2010

Я бы всегда ожидал увидеть окна с именем пользователя / логином из-за функции logout().Вместо этого он, похоже, представляет собой механизм «кэширования», который заново заполняет учетные данные и отменяет мой выход из системы ...

Именно так был разработан HTTP BASIC AUTH, он позволяет сохранять все состояние аутентификации вклиент.Другими словами, невозможно выйти из системы с базовой / дайджест-проверкой подлинности, сервер не может остановить кэширование клиента и повторную отправку аутентификатора BASIC-аутентификации при последующих запросах к серверу.

Я предлагаю использовать аутентификацию на основе форм и метод login HTTPServletRequest.

Ссылки

1 голос
/ 23 мая 2010

Это ни то, ни другое. После входа браузер всегда будет передавать ваш идентификатор пользователя и пароль по URL. Пока вы не перезапустите браузер. Насколько я знаю, каждый браузер делает это. И, насколько я знаю, в настоящее время нет способа заставить браузер забыть об учетных данных.

Однако вы увидите, что ваш сеанс будет другим после выхода из системы. Обычное решение - добавить какую-то переменную в сеанс. Скажите "залогинен". Если эта переменная отсутствует, вы знаете, что пользователь должен сначала войти в систему, и вы будете перенаправлены, чтобы сказать login.jsp. И как только пользователь передал этот jsp, вы снова установите эту переменную.

Используя фильтры, вы можете применять это в масштабе всей системы.

...