2011-12-22 57 views
2

我有類似localhost:7001/MyServlet的頁面。我正在發出類似下面的http連接請求以編程方式使用j_security_check

String url = "http://localhost:7001/MyServlet" 
PostMethod method = new PostMethod(url); 
HttpClient client = new HttpClient(); 

但是「MyServlet」受j_security_check保護。所以當我連接時,重定向到登錄頁面。

如何獲得認證和訪問我的網址,在一個HttpConnection的

注:我使用的Apache常見的HttpClient

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.methods.PostMethod; 

回答

0

我懷疑你可以登錄呼叫服務器在單個請求,除非啓用HTTP BASIC身份驗證。雖然我不知道HTTPClient API的細節,但基本上你需要使用cookie跟蹤會話;張貼您的登錄到/j_security_check;然後訪問該servlet。 (如果使用ACEGI安全,相同的基本過程適用於/j_acegi_security_check。)

Tomcat中令人討厭的摺痕是,只是立即張貼到/j_security_check給出了400「壞請求」;它的驗證者對於狀態轉換非常挑剔,顯然沒有考慮到程序化客戶的設計。您需要首先訪問/loginEntry(您可以丟棄會話cookie以外的響應); 然後將您的登錄信息發送到/j_security_check; 然後跟着產生的重定向(回到/loginEntry我想),它將實際存儲您的新登錄信息; 終於發佈到所需的servlet! NetBeans #5c3cb7fb60fe在使用Tomcat容器身份驗證登錄到Hudson服務器的操作中顯示了此操作。