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-адреса. Развернул это на нашем производственном сервере, и я ничего не получаю.

627   4  

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

    Ничего не найдено.