从 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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用本地主机的 .htaccess 从 URL 中删除目录名称