2011-12-12 127 views
2

我有一個使用基於表單的身份驗證的java web應用程序。如果一個標準的Web用戶訪問我的網站,他們會被重定向到login.jsp,他們會提交他們的憑證,然後資源就會被分配給他們。如何從java客戶端獲得受保護的Web資源

我有一個簡單的java客戶端,需要將信息發佈到我的web應用程序。當我的java客戶端發佈服務器發回的login.jsp的信息時,我會期待的。我可以向證書j_security_check提交第二個請求,但是我發送的任何其他請求仍然會經過,就好像我沒有經過身份驗證一樣。

我知道瀏覽器在背部和泡沫的服務器,以幫助保持狀態頁眉和傳輸存儲會話信息,但我怎麼做從Java客戶端,以便後續請求的身份驗證類似。

+0

您需要維護會話,以便服務器知道您的身份。尋找餅乾。 –

回答

3

發生這種情況是因爲您不發送cookie。

當您第一次轉向服務器時,它會爲您創建會話。會話有ID。該ID作爲特殊的cookie發送給客戶,例如,服務器發送HTTP標頭Set-Cookie。通常基於java的服務器使用名爲jsessionid的cookie,但實際上並不重要。你在客戶端應該得到響應頭文件Set-Cookie的值,並使用HTTP頭Cookie發回。在這種情況下,服務器將在同一會話的上下文中處理您的第二個和第三個(等)請求。您的第二個請求(登錄表單的帖子)使會話通過身份驗證,因此您不會一次又一次重定向到登錄表單。

如果你可以配置服務器端,你可以更容易。服務器也應配置爲支持基本身份驗證(另外還需要基於身份驗證)。所以,你的客戶端可以與價值Basic USER:PASSWORD 其中USER PASSWORD &應以Base64編碼形式發送發送頭Authorization

編輯:你可以使用雅加達HttpClient。它在處理HTTP時簡化了一切。但標準的Java HttpURLConnection也可以完成這項工作。