3

我已经写了一套规则来重定向

http://server.com/application/c/<UserIdValue>

网址的类型

http://localserver.com/application/?userid=<UserIdValue>

我在 apache httpd.conf 中写了以下规则

<Location  /application>
  ProxyPassReverse http://server.com/application/ 
  RewriteEngine On

  RewriteCond %{REQUEST_URI} /c/ [NC]
  RewriteRule application/c/(.*)$ http://localserver.com/application/?userid=$1 [QSA,P]

有了这个我可以访问我的应用程序中的登录页面和其他页面,但是当我尝试在应用程序中登录/注销时,它会进入“本地服务器”位置。

问题出在 spring securityj_spring_security_check, j_spring_security_logout上。我不知道该怎么做。

Spring 安全性优先于代理通行证!!!!!!

4

1 回答 1

1

您必须更改两件事才能使其正常工作:

  1. 将您的 ProxyPass / ProxyPassReverse 行更改为不以尾随 / 结尾。
  2. 告诉您的应用程序服务器正确设置 contextURL(ProxyPassReverse 不会为您更改表单上的 URI)。如果您使用的是 Tomcat,您可以通过编辑 conf/server.xml,找到带有属性 protocol="HTTP/1.1" 的标签,然后添加两个新属性:proxyHost="localserver.com" proxyPort=" 80"(如果 localserver.com 和 server.com 在同一个端口上运行,则不需要 proxyPort="80")。

问题 1 的原因是 Spring Security 没有规范化 URI,所以如果代理给你的应用服务器一个类似http://server.com/application//j_spring_security_check的 URI ,Spring Security 拦截器会将它与http:/匹配/server.com/application/j_spring_security_check,注意由于额外的斜线而不同,并拒绝拦截请求。

于 2013-07-23T09:28:48.013 回答