2014-10-20 2 views
0

У меня есть приложение с 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 это то, что происходит:

  1. Я не прошел проверку подлинности, следовательно, сиро перенаправляет URL входа,/Логин вызывается и я вижу в консоли, что на самом деле я 'm не аутентифицирован
  2. Я заполняю свое имя пользователя и пароль и я отправляю данные в /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 для контекста сервлета)

ответ

0

Да Да, это была проблема перенаправления Spring. Вместо возвращения:

return "redirect:/some/path"; 

Я возвращаю следующее:

return new RedirectView("/some/path", true); 
Смежные вопросы