Apache 登录到应用程序时主机名正在更改
我有一个使用spring安全插件的grails应用程序。该应用程序托管在Tomcat中,带有一个面向HTTPD的接口。我正在使用以下设置强制HTTPS: Tomcat中的server.xmlApache 登录到应用程序时主机名正在更改,apache,ssl,grails,spring-security,Apache,Ssl,Grails,Spring Security,我有一个使用spring安全插件的grails应用程序。该应用程序托管在Tomcat中,带有一个面向HTTPD的接口。我正在使用以下设置强制HTTPS: Tomcat中的server.xml <Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies=".*" protocolHeader="X-Forwarded-Proto" httpsServerPort="443"
<Valve
className="org.apache.catalina.valves.RemoteIpValve"
internalProxies=".*"
protocolHeader="X-Forwarded-Proto"
httpsServerPort="443"
/>
问题
我可以通过http://my.server.com/myapp
(重定向到HTTPS)。然而,问题是当我尝试登录时——在提交用户名/密码并单击提交时,我被重定向到:https://localhost/myapp/login/authfail?login_error=1
(注意主机名已从my.server.com
更改为localhost
)。这发生在成功或不成功的登录上
同样的问题在注销时也会发生。点击https://my.server.com/myapp/logout
转到https://localhost/myapp/logout
下面是跟踪网络呼叫的屏幕截图
看看这个:我在搜索过程中确实遇到了这个问题。如果您注意到,我的grails设置与回答中提到的完全相同(大写字母X-forwarded-proto
除外,但这不重要)。进行这些更改对我没有帮助您是否在grails.serverURL中设置了正确的值?请检查:我在搜索过程中确实遇到了这个问题。如果您注意到,我的grails设置与回答中提到的完全相同(大写字母X-forwarded-proto
除外,但这不重要)。进行这些更改对我没有帮助您是否在grails.serverURL中设置了正确的值?
<Location /myapp>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://my.server.com/myapp [R,L]
</Location>
<Location /myapp>
ProxyPass http://localhost:9090/myapp
ProxyPassReverse http://localhost:9090/myapp
RequestHeader unset X-Forwarded-Proto
RequestHeader add X-Forwarded-Proto "https"
</Location>
grails.plugin.springsecurity.secureChannel.definition = [ '/**': 'REQUIRES_SECURE_CHANNEL' ]
grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
grails.plugin.springsecurity.auth.forceHttps = true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443
grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-FORWARDED-PROTO'
grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-FORWARDED-PROTO'
grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'