2011-08-26 101 views
4

我有一個使用struts2與舊式servlet結合的java-web-application。 使用Acegi安全性。request.getRemoteUser()有時會返回null

在我的servlets中,我正在記錄用戶正在嘗試做什麼以及它是哪個用戶。爲了讓用戶即時使用request.getRemoteUser()

但是對於我的大供應來說,結果並不一致。大多數時候getRemoteUser()返回正確的用戶名,但每隔一段時間我會得到一個空值。

這背後的原因是什麼?

編輯: 經過您的反饋,我發現servlet-urls根本沒有被安全覆蓋。所以這可能導致getRemoteUser()爲空。我現在將爲這些實現安全性,並在回髮結果之前進行更多測試。

+3

根據的JavaDoc「返回用戶的登錄提出這個要求,如果用戶已經通過認證,或NULL,如果用戶沒有通過驗證。用戶名是否與每個後續請求一起發送取決於瀏覽器和驗證類型,與CGI變量REMOTE_USER的值相同。「所以它可能是Acegi/Browser沒有按預期設置遠程用戶。 –

回答

2

doc說爲什麼你要空:

返回用戶的提出這個要求的登錄,如果用戶已經通過認證,或NULL,如果用戶沒有通過驗證。每個後續請求是否與用戶名一起發送取決於瀏覽器和身份驗證類型。與CGI變量REMOTE_USER的值相同。

您需要調查導致問題的瀏覽器。

3

getRemoteUser()將返回用戶登錄否則它將返回空值。

你正在使用什麼樣的認證(基本/摘要等Jaas)?

您是否看到特定網址(servlets)的這個錯誤?在這種情況下,該URL可能有其他安全限制。

另一個原因是客戶端(瀏覽器)沒有發送帶有請求的用戶名。如果您位於要求進行身份驗證的URL樹之外,則會發生這種情況。

相關問題