2013-01-16 48 views
2

我寫的規則集來代理通失敗,春天secuity

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

類型的URL重定向到

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] 

有了這個我可以訪問登錄頁面和我的應用程序中的其他頁面,但是當我嘗試登錄/註銷應用程序時,它brea k到'localserver'位置。

問題出在彈簧安全j_spring_security_check, j_spring_security_logout。我沒有任何線索該怎麼做。

春季安全優先於代理通過!!!!!

回答

0

有兩件事情,你將不得不改變得到這個工作:

  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,所以如果代理給你的應用程序服務器的URI像http://server.com/application//j_spring_security_check,Spring Security的攔截器將匹配它http://server.com/application/j_spring_security_check,請注意,這是由於不同到額外的斜線,並拒絕攔截請求。