我们在Squid代理后面有一个带有Spring Security的Spring 3应用程序。问题是Spring只知道内部squid url,所以在成功登录example.com/login
而不是重定向到example.com/home
后,它会重定向到internal.example.com
。
有谁知道如何处理这种情况?
我的配置:
<security:http use-expressions="true" auto-config="true">
<security:intercept-url pattern="/" access="hasRole('ROLE_ANONYMOUS') or hasRole('ROLE_GENERAL_ADMINISTRATION')"/>
<security:intercept-url pattern="/**" access="hasRole('ROLE_GENERAL_ADMINISTRATION')"/>
<security:intercept-url pattern="/static/**" filters="none"/>
<security:logout invalidate-session="true" logout-url="/logout" logout-success-url="/"/>
<security:form-login login-page="/" default-target-url="/dashboard"/>
<security:anonymous/>
</security:http>
在我的情况下,管理员已经错误地设置了mod_jk所以一切都很好用squid和上面的配置。
答案 0 :(得分:1)
我正在使用Apache HTTP Reverse代理后面的Spring安全性的Web应用程序和一些愚蠢的应用程序,其行为与您上面描述的一样,我们的解决方案是使用 mod_rewrite模块
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
无论如何,你说的是非常奇怪的,因为正确的Spring安全配置应该使用相对URL,并且无论天气如何,内部或外部主机都在url中使用。
如果您配置网址
<security:form-login login-page="//login.jsp" login-processing-url="/login" always-use-default-target="true"/>
在内部或外部URL中的行为应该相同,这听起来像配置中的问题。
答案 1 :(得分:0)
我遇到了类似的问题,在我的(当前是PHP)应用程序前面有一个nginx反向代理,但其他人建议修复URL的工作是在代理上完成的,例如: http://www.informit.com/articles/article.aspx?p=169534:
响应标头重新映射。响应标头可能包含 显式指向内容Web服务器的信息。一 示例是与重定向一起使用的“Location:”标头。该 反向代理服务器重新映射“Location:”字段,替换 引用具有自己地址的内容Web服务器。
也是相关问题的答案:"Redirect to https for few services using spring"。