从 URL 中删除上下文名称 - 使用 Spring Security 的 mod_proxy_ajp

Posted

技术标签:

【中文标题】从 URL 中删除上下文名称 - 使用 Spring Security 的 mod_proxy_ajp【英文标题】:Remove context name from URL - mod_proxy_ajp with Spring Security 【发布时间】:2014-07-12 07:44:19 【问题描述】:

我有一个名为“FitnessTracker”的应用在 tomcat 上运行,发布 8080。我使用的是 Spring Security,当我使用 http://localhost:8080/FitnessTracker 直接在 tomcat 上测试它时一切正常

然后我在 Apache http 2.2 上配置了 mod_proxy_ajp,使用域名访问,下面是我的 VirtualHost 配置:

<VirtualHost *:80>
    ServerName www.testing.com
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    RewriteEngine on 
    RewriteRule ^/FitnessTracker/(.*)$ /$1 [P]

    ProxyPass /  ajp://localhost:8009/FitnessTracker/
    ProxyPassReverse / ajp://localhost:8009/FitnessTracker/
</VirtualHost>

现在,当我访问 www.testing.com/ - 它被重定向到 www.testing.com/FitnessTracker/login.html

有没有办法在 URL 中不包含 /FitnessTracker/?我想从 URL 中隐藏 tomcat 上下文名称。 理想情况下,我希望 URL 看起来像 www.testing.com/login.html 我知道这是由于 RewriteRule,但没有重写规则,带有 mod_proxy 的 spring 安全性不起作用 - 因为 Spring 安全性与上下文名称一起重定向到登录页面。

如果您有任何建议,请告诉我。

【问题讨论】:

【参考方案1】:

我想你忘了重写 cookie 域和 cookie 路径。检查ProxyPassReverseCookieDomain 指令。从后端的角度来看,请求路径仍然必须看起来像 /FitnessTracker/

【讨论】:

我正在寻找无需在 URL 中包含上下文名称即可访问应用程序的方法 请阅读httpd.apache.org/docs/current/mod/…

以上是关于从 URL 中删除上下文名称 - 使用 Spring Security 的 mod_proxy_ajp的主要内容,如果未能解决你的问题,请参考以下文章

从 URL 中删除应用程序名称

如何使用本地主机的 .htaccess 从 URL 中删除目录名称

如何使用 htaccess 从 url 中删除文件夹名称

从Tomcat URL中删除文件夹名称

如何从 CodeIgniter 中的 URL 中删除控制器和函数名称

从 URL 中删除文件夹名称