2012-04-23 38 views
0

我已經在基於com.sun.net.httpserver.HttpServer,它也使用基本身份驗證我的Java程序實現的小HTTP服務器。這一切工作正常,但是,我想處理任何失敗的身份驗證請求。如何處理失敗的認證Java中的HttpServer

默認情況下,當用戶身份驗證失敗(當她擊中了瀏覽器的登錄彈出取消按鈕),空白頁被髮送回客戶端; HttpHandler的handle()方法不會被調用。

任何想法如何在我的程序中捕獲這些失敗的身份驗證嘗試?

謝謝!

回答

0

我不知道,如果過濾器在身份驗證之前調用(您可以通過印刷SOM調試信息找出在過濾器的控制檯,看看它是否被寫在身份驗證之前安慰「你踢出。」如果所以你可能會通過創建認證之前運行,並將用戶重定向到一個錯誤頁面

1

了看看文檔篩選器做到這一點......我想你可以通過返回做到這一點,從您的驗證器,一個Authenticator.Retry結果和它指定一個新的頭「的位置:http://mysite/loginpage」或任何你想重定向到(只記得你需要指定絕對URL,以http://,而不是相對URL/loginpage)

編輯: 如果您正在使用BasicAuthenticator的子類,您還需要重寫身份驗證方法,你會想看看原來的源代碼(見http://xantorohara.blogspot.com/2008/07/sources-of-comsunnethttpserverhttpserve.html)看到原來的身份驗證方法做什麼... 或者你可以在你的身份驗證試驗()方法,看看有什麼super.authenticate()返回時,如果它是失敗的你,而不是發送一個重試與地點:包頭

+0

非常感謝,這似乎工作! – Matthias 2012-04-23 23:25:46

+0

太棒了!它是否使用authenticate()覆蓋來修復它? – 2012-04-23 23:27:20

+0

還有一個問題:在我向客戶端發回了一個新的Authenticator.Retry(301)後,它被正確地重定向到登錄失敗的信息頁面。但是,當我重新嘗試登錄時,即重新加載登錄頁面時,我將自動重新導向登錄失敗的信息頁面。看起來瀏覽器「認爲」(無效)證書是正確的?! – Matthias 2012-04-24 23:29:39