2012-04-16 98 views
2

我爲我的Java/Tomcat應用程序創建了一個過濾器,它使用spnego通過kerberos對用戶進行身份驗證。除非用戶關閉了IWA(集成Windows身份驗證),否則它非常有效。過濾器所做的第一件事是設置SC_UNAUTHORIZED(401)以便瀏覽器進行協商。如何清除狀態401 HttpServletResponse.SC_UNAUTHORIZED?

httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED, true); 

一旦發生這種情況它將運行在相同的路徑和失敗,一遍又一遍,並用一個空白頁結束。我所做的是添加一個會話變量來計算失敗次數。三次失敗後,我想清除SC_UNAUTHORIZED並讓頁面繼續加載。所有這一切意味着用戶將在網站上結束,但沒有登錄,這很好。

我曾嘗試以清除標誌,但它什麼都沒有:

System.out.println("check status 1: " + httpResponse.getStatus()); 
httpResponse.setStatus(HttpServletResponse.SC_OK); 
System.out.println("check status 2: " + httpResponse.getStatus()); 

兩個版畫仍然是401.我本來期望第二個是200你如何改變SC_UNAUTHORIZED一旦設置好了?我知道我只是想念一件簡單的事情。

+0

也許你可以發送重定向到servlet,它基於表單的身份驗證? – 2012-04-30 01:57:27

回答

0

你有沒有嘗試以下方法:

httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED); 

如果是基本身份驗證,你也可以設置前sendError頭:

httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"mycustomrealm\"");