Spring Security正在重定向到生产服务器上的localhost

Gre*_*egg 2 grails spring-security

我有一个安装了spring-security-core插件的grails应用程序.一切都在当地很好.我部署到临时服务器,一切正常.我部署到我们的生产服务器,它是我们的登台服务器的镜像.我可以很好地进入未受保护的页面.但是当Spring Security开始并尝试执行重定向时,它会重定向到localhost而不是grails.serverURL.

我打算尽可能高地记录日志并重新部署以查看我是否可以做任何事情的正面或反面.我会在这里发布我的发现.如果有人以前经历过这个并且知道可能发生了什么,请告诉我.此外,如果有任何需要查看的配置文件,我也可以提供.谢谢.

更新 我将以下内容添加到底部Config.groovy

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity.onAuthorizationEvent = { e, appCtx ->
   println "here"
   println e
}
Run Code Online (Sandbox Code Playgroud)

在本地,当我尝试访问受保护的页面时,该闭包会被击中2次.一次为初始网址.第二次使用auth url.将它部署到我们的生产服务器,我什么也得不到.

Bur*_*ith 5

该重定向中完成的org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint.commence() 方法,所以,如果你能借调试督促一台服务器,你可以设置一个断点.

它建立基于登录表单URI(如/登录/ AUTH)重定向的URL,但它使用的request.getServerName(),所以应该是一样的原始请求.请注意,grails.serverURL这里没有任何影响,因为它使用请求的服务器名称,端口,上下文等建立的网址

它可能通过把Apache或负载平衡器在你的servlet容器的正面影响,虽然我已经做了两个,它的正常工作.

你做过任何resources.groovy可能影响这个的bean定制吗?


小智 5

如果您的应用程序服务器位于Web服务器后面,则此问题可能是由Web服务器配置引起的.我有同样的问题并通过在我的httpd.conf或apache2.conf中使用以下条目来纠正它.这里是...

...这里的样板配置......

################################
# 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       #
################################
Run Code Online (Sandbox Code Playgroud)