Я написал приложение HTML 5, которое использует AngularJS и интерфейсы с бэкэндом Java REST, работающим на Tomcat. Я использую Spring Security для обработки логина и безопасности.
Когда пользователь вводит веб-сайт, он пересылается на страницу входа в систему, которая создает сеанс и перенаправляется на индексную страницу. REST вызывает загрузку дополнительных данных с сервера, а затем использует этот сеанс для аутентификации. Если сеанс отсутствует, я возвращаюсь к базовой аутентификации по HTTP, так что можно вызывать конечные точки REST отдельно от веб-приложения.
Проблема, с которой я столкнулся, - это время окончания сеанса. Это вызывает ответ HTTP 401 Unauthenticated
с сервера. Я думал, что смогу поймать эту ошибку и перенаправить пользователя обратно на страницу входа с Javascript. Однако до того, как вызывается мой обработчик ошибок, браузер сначала показывает окно входа в систему, только если я нажму "Отменить мой обработчик ошибок Javascript", вы сможете обработать ответ.
Мой вопрос в том, есть ли способ предотвратить отображение браузером этого окна входа в систему? Или это общая проблема с моим дизайном приложения?
Альтернативой может быть не использование сеанса вообще и кэширование имени пользователя и пароля в приложении. Затем мне нужно отправить его с каждым вызовом REST с использованием базовой аутентификации, будет ли это лучший подход?
Ниже приведен ответ HTTP с сервера:
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Basic realm="Spring Security Application"
Content-Type: text/html;charset=utf-8
Content-Length: 999
Date: Mon, 30 Sep 2013 11:00:34 GMT
Обновление: Похоже, что причиной этого является заголовок WWW-Authenticate
, который заставляет браузер отображать диалоговое окно входа в систему.