Spring Security и AJP-прокси - PullRequest
8 голосов
/ 19 мая 2011

Я использую Spring Security и Apache-прокси для веб-приложения.При использовании стандартного mod_proxy все в порядке, но после переключения на прокси AJP возникает проблема с перенаправлениями безопасности Spring.

Конфигурация Apache:

<VirtualHost *:80>
  ServerName domain.com

  ProxyPass / ajp://localhost:8009/Context/
  ProxyPassReverse / ajp://localhost:8009/Context/
</VirtualHost>

Когда я звоню http://domain.com/loginЯ вижу форму входа.

Когда я отправляю форму, я иду на http://domain.com/auth и аутентифицируюсь.

Затем Spring Security должен перенаправить на http://domain.com/index, но этовместо этого перенаправляет на http://domain.com/Context/index

Как мне избавиться от этого пути контекста?Почему Spring Security добавляет его везде?

Был такой же вопрос на сайте Spring Security, но никто не ответил на него:

http://forum.springsource.org/showthread.php?95141-Why-is-spring-security-including-the-context-path

PS Кажется странным, что Google нене найти ничего более связанного с этой проблемой.Я единственный, кто использует Spring Security + AJP?Может быть, это неправильный шаблон?

Решение:

<VirtualHost *:80>
  ServerName domain.com

  RewriteEngine on
  RewriteRule ^/Context/(.*)$ /$1 [R=301]

  ProxyPass / ajp://localhost:8009/Context/
  ProxyPassReverse / ajp://localhost:8009/Context/
</VirtualHost>

1 Ответ

4 голосов
/ 22 мая 2011

Spring Security поддерживает контекст веб-приложения, что означает, что его перенаправления всегда будут основываться на текущем контексте веб-приложения. Это сделано специально, поскольку на вашем сервере приложений могут работать несколько различных веб-приложений, которые не должны мешать друг другу.

Вы запускаете только это приложение на своем сервере и имеете возможность развернуть его как приложение ROOT на Tomcat (например, поместить его в webapps/ROOT/)? Это устранит ваш контекстный префикс и решит вашу проблему.

Другим вариантом может быть перезапись URL-адреса перенаправления на сервере приложений перед его передачей клиенту, e. г. с и outbound-rule из замечательного URLRewriteFilter от org.tuckey (как mod_rewrite, но для веб-приложений Java EE). Конечно, вы должны позаботиться о правильном упорядочении фильтров в web.xml, поскольку Spring Security также использует фильтры для своей логики.

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