У меня есть приложение с Apache Shiro. Когда я получаю доступ к моему приложению через localhost: 8080/MyApp, я успешно перенаправляюсь на localhost: 8080/MyApp/login. Я аутентифицируюсь с учетными данными, и все хорошо - меня перенаправляют на домашнюю страницу, для которой требуется аутентификация.сеанс Apache Shiro недействителен при доступе к приложению через nginx proxy_pass
Я настроил Nginx прокси для доступа к приложению с «славно» ищет URL так:
server {
server_name www.example.com example.com;
listen 80;
location/{
proxy_pass http://localhost:8080/MyApp/;
}
}
Когда я получить доступ к своему приложению через www.example.com, я быть снова успешно перенаправлен на www.example.com/login, я заполняю учетные данные, но вместо того, чтобы перейти на мою домашнюю страницу, меня снова перенаправляют на страницу входа, как будто я не был аутентифицирован.
Я попробовал несколько вещей, первое - я проверил, достиг ли мой запрос на URL, отвечающий за проверку подлинности и я на самом деле проверкой подлинности ли, у меня есть два отображения в моих контроллеров:
- /логин - которая перенаправляет на страницу входа Shiro
- /login.do - который фактически делает проверку подлинности
Когда либо вызывается я уверен, отображение в консоли, если я аутентификацию через:
System.out.println("is auth:" + SecurityUtils.getSubject().isAuthenticated());
Когда я иду в www.example.com это то, что происходит:
- Я не прошел проверку подлинности, следовательно, сиро перенаправляет URL входа,/Логин вызывается и я вижу в консоли, что на самом деле я 'm не аутентифицирован
- Я заполняю свое имя пользователя и пароль и я отправляю данные в /login.do, в консоли я вижу, что я успешно аутентифицирован, login.do пытается перенаправить на домашнюю страницу, но вместо этого Я заканчиваю на scree login, поэтому/login вызывается, и в консоли я вижу, что я больше не аутентифицирован
Я не был уверен, была ли это ошибка Сиро или, может быть неправильная конфигурация Nginx, поэтому я изменил Nginx конфигурации на следующее:
server {
server_name www.example.com example.com;
listen 80;
location /MyApp {
proxy_pass http://localhost:8080;
}
}
С выше Nginx конфигурации и доступ к приложению через www.example .com/MyApp, все работает как шарм, меня перенаправляют на страницу входа в систему, я успешно аутентифицируюсь и перенаправляюсь на домашнюю страницу.
Может ли кто-нибудь объяснить это поведение? Это проблема nginx или siro, или я пропустил что-то еще?
// EDIT: Я думаю, что я знаю, что это проблема, но я не знаю, как ее решить еще:
Я думаю, что Широ использует имя приложения, чтобы сохранить печенье, www.example.com и www.example.com/MyApp сохранил файлы cookie по тому же пути -/MyApp, следовательно, www.example.ком не может найти правильное печенье - опять же это только подозрение на данный момент
// EDIT: я начинаю думать, что это связанно с Sprinv MVC перенаправления (я думаю, что это не accouning для контекста сервлета)