Spring Security перенаправляет на localhost на рабочем сервере
У меня есть приложение grails с установленным плагином spring-security-core. На местном уровне все работает нормально. Я развернулся на промежуточном сервере, и все работало нормально. Я развернулся на нашем производственном сервере, который является зеркалом нашего промежуточного сервера. Я прекрасно могу добраться до незащищенных страниц. Но когда Spring Security подключается и пытается сделать это перенаправление, оно перенаправляет на localhost вместо grails.надо установить до начала использования.
Я собираюсь включить ведение журнала как можно выше и передислоцируйтесь, чтобы посмотреть, смогу ли я сделать орел или решку из чего-нибудь. Я опубликую свою находку здесь. Если кто-то испытывал это раньше и знает, что может произойти, пожалуйста, дайте мне знать. Кроме того, если есть какие-либо файлы конфигурации, которые нужно увидеть, я могу предоставить их также. Спасибо.
Обновление
Я добавил следующее в нижнюю конфигурацию.заводной
grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.onAuthorizationEvent = { e, appCtx ->
println "here"
println e
}
Локально, это закрытие получает удар 2 раза, когда я пытаюсь получить доступ к защищенной странице. Один раз для начального url. Второй раз для авторизации URL-адреса. Развернул это на нашем производственном сервере, и я ничего не получаю.
4 ответов:
Перенаправления выполняются в
org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint.commence()метод , так что вы можете установить точку останова там, если вы можете заимствовать один из prod серверов для отладки.Он строит URL-адрес перенаправления на основе формы входа uri (например, /login / auth), но он использует
request.getServerName(), поэтому он должен быть таким же, как и исходный запрос. Обратите внимание, чтоgrails.serverURLздесь не влияет, так как он строит URL-адрес, используя запрошенное имя сервера, порт, контекст и т. д.На это может повлиять установка Apache или балансировщика нагрузки перед вашим контейнером сервлета, хотя я сделал и то и другое, и это сработало отлично.
Вы делали какие-либо настройки bean в
resources.groovy, которые могли бы повлиять на это?
Если сервер приложений находится за веб-сервером, эта проблема, скорее всего, вызвана конфигурацией веб-сервера. У меня была такая же проблема, и я исправил ее, используя следующую запись в моем httpd.conf или apache2.конф. Вот оно...
...шаблонная конфигурация здесь...
################################ # Begin yourdomain.com... # ################################ ProxyRequests Off ProxyPreserveHost On <Proxy> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:28080/ ProxyPassReverse / http://localhost:28080/ <Location> Order allow,deny Allow from all </Location> ################################ # ... end yourdomain.com # ################################
Предположим, что у вас есть веб-сервер (apache, nginx и т. д.) В качестве прокси перед Tomcat (и вы используете Tomcat)...
В настройках, где разрешены и http, и https, добавьте отдельный элемент Connector к серверу tomcat conf / server.xml-файл:
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" scheme="https" secure="true" proxyName="somehostname.domain" proxyPort="443" />Если разрешен только https, вы можете добавить атрибуты scheme, secure, proxyName и proxyPort в существующий элемент Connector.
В конфигурации apache создайте прокси-сервер виртуального хоста *:443 для соединителя с дополнительными атрибутами. Обычный http *: 80 может подключаться к исходному разъему.
Для получения дополнительной информации: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#Proxy_Support http://tomcat.apache.org/tomcat-7.0-doc/proxy-howto.html
Я знаю, что это старый вопрос, но я хотел бы добавить свои выводы, чтобы помочь другим пользователям, которые могут столкнуться с этой проблемой.
В дополнение к ответу Берта (я предполагаю, что вы используете tomcat), я обнаружил, что возвращаемое значение запроса.getServerName () также можно установить через сервер.xml
То есть в tomcat 8 https://tomcat.apache.org/tomcat-8.0-doc/config/http.html
Имея эту строку в сервере.xml
<Connector protocol="HTTP/1.1" port="8080" ... proxyName="localhost"/>Вернет "localhost", когда вызывается getServername.
Comments