2010-02-02 68 views
2

我對登錄和認證概念完全陌生。我正在開發一個Glassfish Web應用程序,該應用程序應向所有訪問者提供一般內容,併爲註冊用戶使用用戶名和密碼登錄一些額外的內容。我一直在閱讀關於安全性的Java EE教程,並且我認爲基於表單或HTTP身份驗證可以滿足我的需求(訪問者在嘗試瀏覽安全內容時被要求提供憑據)。Glassfish認證:領域可以是外部數據庫

但是,我的第一個猜測是,註冊用戶應該存儲在外部數據庫以及他們的哈希和鹽漬密碼。 Glassfish中Web應用程序的安全性似乎依賴於直接在應用程序服務器上手動填充的領域(定義用戶和組並將它們映射到應用程序中的角色)。

我誤解了Glassfish的安全性嗎?或者,領域可以是應用程序服務器之外的外部數據庫嗎?任何關於此主題的文檔鏈接對我都很有用。

預先感謝您

回答

1

它實際上是可能的。 在Glassfish中,轉至配置/安全/領域,創建一個新領域並將類名設置爲com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm。 指示綁定到數據庫的JDBC資源,並指示存儲用戶名/密碼的表和列。數據庫還應該包含用戶必須屬於的組被允許訪問的表格。也指出這些。

在應用程序中,像往常一樣設置web.xml和sun-web.xml中的域名。

+0

文檔:http://docs.sun.com/app/docs/doc/820-4495/ggmww?a=view 利用MySQL的博客條目:http://blogs.sun.com/swchan/entry/jdbcrealm_in_glassfish_with_mysql – vkraemer 2010-02-04 15:31:56

+0

雖然這幾乎是可能的,但我認爲在散列之前你不能讓JDBCRealm salt成爲密碼,這實際上是一個嚴重的問題脆弱性imho。此外,Glassfish的領域實現在組/角色映射方面存在嚴重缺陷,因爲角色必須在sun-web.xml中進行「硬編碼」。有一種解決方法是使用視圖,但這是一個人爲的解決方案。你可以通過實現你自己的領域來解決鹽問題,但是我認爲解決團隊/角色映射問題是困難的。 – 2011-01-06 10:55:39