【问题标题】:mod_rewrite not working to secure grails applicationmod_rewrite 无法保护 grails 应用程序
【发布时间】:2013-01-09 06:26:52
【问题描述】:

我有一个在 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,没有安全性,因此重写不起作用(如果我手动将 http 替换为 https,它工作正常)。

有什么提示吗?

【问题讨论】:

  • 你能检查 grails.serverURL 吗?它使用 https 吗?
  • 不,它没有。我不需要通过 https 访问整个应用程序(我认为这是正确的吗?)
  • 你在使用spring security吗?
  • 是的,我使用的是 spring security(和 grails 2.1.x)
  • 试试这个答案中的解决方案:stackoverflow.com/a/13152698/166062

标签: apache tomcat grails mod-rewrite mod-proxy


【解决方案1】:

当我去https://mydomain.com/myapp/adm - 这需要 身份验证 - 它重定向到 http://mydomain.com/myapp/login/auth;jsessionid=yyyyyy,

看起来 Spring 安全执行重定向到 /login/auth。 Burt Beckwith 提到 here 说 Spring Security 不需要 grails.serverURL。 它应该使用 request.getServerName() 基本上 grails.serverURL 已经用于createLink methods

我建议:

  1. 在生产环境中尝试在 grails.serverURL 中使用 https
  2. 设置应用上下文(如果第 1 项没有帮助):

    grails.app.context="/myapp"

更新

只是为了隔离和更好地了解问题所在:

能否请您使用 https 运行 grails(在开发环境中)并检查是否一切正常:

grails run-app -https

【讨论】:

    【解决方案2】:

    你打错了,你想要这个:

    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。因此,虽然它有效,但毫无用处。

    【讨论】:

      【解决方案3】:

      在同时允许 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 可以连接到原来的 Connector。

      更多信息: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#Proxy_Support http://tomcat.apache.org/tomcat-7.0-doc/proxy-howto.html

      【讨论】:

      猜你喜欢
      • 2011-04-06
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多