如果用户未通过身份验证,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 将重定向到特定页面