我正在運行Glassfish 3.0,並且正在爲登錄驗證實現JDBCRealm。用戶名和角色保存在一個名爲usertable的表中。身份驗證按預期工作。如何使用JDBCRealm獲取登錄用戶的用戶名?
但現在的問題是,當用戶登錄時,我怎麼能檢索已登錄的用戶在應用程序的用戶名?
PS:我執行JSF頁面和Managed Bean的
我正在運行Glassfish 3.0,並且正在爲登錄驗證實現JDBCRealm。用戶名和角色保存在一個名爲usertable的表中。身份驗證按預期工作。如何使用JDBCRealm獲取登錄用戶的用戶名?
但現在的問題是,當用戶登錄時,我怎麼能檢索已登錄的用戶在應用程序的用戶名?
PS:我執行JSF頁面和Managed Bean的
在JSF,可以檢索與該請求,因此,在當前會話相關聯的當前主,使用ExternalContext
對象,它可以從FacesContext
檢索。
FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
上面調用可以做到在JSF託管bean:與請求相關聯的主要使用方法getUserPrincipal()
從的ExternalContext訪問。您可以調用Principal對象上的getName()
方法來以String形式檢索用戶的名稱。
請注意,如果您在驗證前檢索委託人,或者身份驗證方案不能保護整個站點,那麼您可能會獲得引用匿名用戶的Principal
實例。
Request.getRemoteUser或Request.getUserPrincipal,依賴於您使用的身份驗證,因此,如果您使用的測試文件的境界和生產JDBC領域,將工作的境界在這兩種情況下。順便說一下,如果你使用JDBCRealm,也可以看看FlexibleJDBCRealm。
你的身份驗證方法應返回一個java.security.Principal中,將包含名稱。
http://download.oracle.com/javase/1.4.2/docs/api/java/security/Principal.html
非常感謝葡萄!是的,這是它..它的工作。謝謝!!! – fareed
'FacesContext.getExternalContext()。getUserPrincipal();'?它不應該像'FacesContext.getCurrentInstance()。getExternalContext()。getUserPrincipal();'?在這篇文章發佈時,JSF的一些老版本是否存在? – Tiny
@Tiny,是的,如果您沒有FacesContext實例,則必須首先調用getCurrentInstance()靜態方法。 –