如果用户未通过身份验证,Apache 2.x 和 mod_proxy 会产生重定向循环

Posted

技术标签:

【中文标题】如果用户未通过身份验证,Apache 2.x 和 mod_proxy 会产生重定向循环【英文标题】:Apache 2.x and mod_proxy produce redirect loop if user is not authenticated 【发布时间】:2013-11-23 05:47:05 【问题描述】:

我有一个带有弹簧安全性的应用程序。如果用户未通过身份验证,他将被重定向到 bo/login 页面。

问题是我在 tomcat 前面设置 apache Web 服务器的方式会产生无限重定向循环:

<VirtualHost *:80>
       ServerName dev.bo.MYDOMAIN.com
       ProxyPass / ajp://localhost:20009/bo/
       ProxyPassReverse / ajp://localhost:20009/bo/
       ProxyPassReverseCookiePath /bo/ /
</VirtualHost>

有谁知道如果用户未通过身份验证,我该如何防止循环?

【问题讨论】:

【参考方案1】:
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName dev.bo.MYDOMAIN.com
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyPass / ajp://localhost:20009/bo/
  ProxyPassReverse / ajp://localhost:20009/bo/
</VirtualHost>

试试上面的配置

【讨论】:

【参考方案2】:

我终于找到了问题所在。我还必须代理“bo”路径:

<VirtualHost *:80>
   ServerName dev.bo.MYDOMAIN.com
   ProxyPass / ajp://localhost:20009/bo/
   ProxyPassReverse / ajp://localhost:20009/bo/
   ProxyPass /bo ajp://localhost:20009/bo/
   ProxyPassReverse /bo ajp://localhost:20009/bo/
   ProxyPassReverseCookiePath /bo/ /
</VirtualHost>

【讨论】:

【参考方案3】:

为什么要使用 mod_jk 和 mod_proxy?你应该能够做到

ProxyPass / http://localhost:20009/bo/
ProxyPassReverse / http://localhost:20009/bo/

至少您为自己节省了协议切换。

【讨论】:

为什么不呢? ajp 协议有很多好东西。顺便说一句,这与我的问题无关。

以上是关于如果用户未通过身份验证,Apache 2.x 和 mod_proxy 会产生重定向循环的主要内容,如果未能解决你的问题,请参考以下文章

Flask - 如果当前用户未通过身份验证,如何重定向到登录页面?

Django - 当页面不存在或用户未通过身份验证时返回更改答案

Spring Boot Security - 如果用户未通过 Oauth2 进行身份验证,如何禁用对 swagger ui 页面的端点的访问

如果用户未使用中间件进行身份验证,Laravel 5.4 将重定向到特定页面

漏洞通报|Apache Solr上传功能漏洞CVE-2020-13957

Symfony2 自定义身份验证:用户登录但未通过身份验证