2014-06-13 68 views
0

我有一個安全costraint,涵蓋了我的web應用程序中的一些頁面。使用JAAS和表單進行身份驗證,並且工作正常。 (我成功實現了我的LoginModule)。Tomcat和Jaas身份驗證servlet基於表單的安全性costraint

但是我需要通過servlet進行替代認證。

這就是Servlet的代碼:

try { 
    TokenCallbackHandler tokenCallbackHandler = new TokenCallbackHandler(properties,token); 

    LoginContext lc = new LoginContext("myApp", tokenCallbackHandler); 
    lc.login(); 
} catch (LoginException e) { 
    e.printStackTrace(); 
} 

Debbugging我看到初始化,登錄並提交代碼被稱爲沒有錯誤。 該servlet返回一個HTML頁面重定向到一個受保護的資源的一個js:

function doRedirect() { 
    location.href = "/protectedPath/ProtectedResource.html"; 
} 
window.setTimeout("doRedirect()", 1); 

但是,當瀏覽器試圖讓被保護的網頁應用程序服務器返回到登錄頁面。

我缺少什麼? 用js重定向我可能會丟失會話cookie? 或者,是否有可能是我試圖從未受保護的資源訪問(通過重定向)受保護的資源?

- 編輯---

我已經採取了看看餅乾:當我在servlet登錄它返回一個會話cookie,當我試圖得到一個受保護的資源,我可以看到瀏覽器傳遞該會話cookie到服務器,但它似乎得到了拒絕,事實上,它與另一個會話cookie迴應,要登錄表單頁面

- 編輯---

解決的另一種方式。

在對tomcat認證機制進行了一些調查後,我意識到我正在嘗試做的事情是錯誤的。

定義了一個安全約束和一個表單登錄配置來保護我的資源我已經告訴tomcat以它的方式來管理身份驗證。所以只要我沒有通過tomcat認證工作流程,我就無法認證任何東西。此外,我發現在同一個Web應用程序中配置不同的登錄配置是不可能的,因此定義了表單身份驗證會阻止我以其他方式進行身份驗證。可能我需要的是BaseAuthenticator類的自定義實現(FormAuthenticator,BasicAuthenticator等的基類,包含相應登錄配置的代碼),但我不確定它可能是一個好主意,也許是安全過濾器將是一個更好的解決方案。

在tomcat中瞭解了有關安全篩選器的所有內容,我暫時設法解決了模擬我的servlet中的表單身份驗證問題(我真的很糟糕,我知道)。

+0

您是否在成功登錄後在您的servlet代碼中的任意位置創建會話? –

+0

如果它被拒絕,那麼cookie中有一個不同的路徑,或者設置時cookie不安全,但是您正在重定向到安全端點? –

+0

不錯的建議,我在servlet中創建了一個新的會話,但沒有任何改變,但是現在我嘗試玩intestation,形成我可以看到表單身份驗證返回一個set-cookie頭。 –

回答

0

如果你想認證和授權管理認真工作,你應該考慮使用一個完善的框架,如Apache ShiroSpring Security。後者至少允許併發身份驗證模式(基本http和登錄表單作爲默認設置,但許多其他可能)