我有一个在tomcat上运行的grails应用程序,我正在使用mod_proxy来连接http服务器。我的目标是确保登录过程。
强制https的我的VirtualHost配置是:
ProxyPass /myapp/ http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp/ http://127.0.0.1:8080/myapp
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(myapp/login) https://%{HTTP_HOST}:443/$1 [NC,R=301,L]
当我转到需要身份验证的https://mydomain.com/myapp/adm时,它会重定向到http://mydomain.com/myapp/login/auth;jsessionid=yyyyyy,没有任何安全性,因此重写无效(如果我用https手动替换http,它可以正常工作)。< / p>
任何提示?
答案 0 :(得分:1)
当我去https://mydomain.com/myapp/adm - 这需要 身份验证 - 重定向到 http://mydomain.com/myapp/login/auth;jsessionid=yyyyyy,
看起来Spring安全执行重定向到/ login / auth。 Burt Beckwith提到here Spring安全性不需要grails.serverURL。 它应该使用request.getServerName() 基本上grails.serverURL已用于createLink methods
我建议:
设置应用上下文(如果第1项)没有帮助):
grails.app.context = “/ MyApp的”
<强>更新强>
只是为了孤立并更好地了解问题所在:
请你用https运行grails(在开发环境中)并检查一切是否正常:
grails run-app -https
答案 1 :(得分:1)
你弄错了,你想要这个:
RewriteRule ^/myapp/login https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
您当前的RewriteRule无法匹配
我也怀疑这有什么意义
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/myapp/login [NC]
这只会重复RewriteRule中您想要的^ / myapp / login。因此,虽然它有效但它没有用处。
答案 2 :(得分:1)
在允许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