2011-07-12 114 views
2

我正在運行Glassfish 3.0,並且正在爲登錄驗證實現JDBCRealm。用戶名和角色保存在一個名爲usertable的表中。身份驗證按預期工作。如何使用JDBCRealm獲取登錄用戶的用戶名?

但現在的問題是,當用戶登錄時,我怎麼能檢索已登錄的用戶在應用程序的用戶名?

PS:我執行JSF頁面和Managed Bean的

回答

7

在JSF,可以檢索與該請求,因此,在當前會話相關聯的當前主,使用ExternalContext對象,它可以從FacesContext檢索。

FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal(); 

上面調用可以做到在JSF託管bean:與請求相關聯的主要使用方法getUserPrincipal()從的ExternalContext訪問。您可以調用Principal對象上的getName()方法來以String形式檢索用戶的名稱。

請注意,如果您在驗證前檢索委託人,或者身份驗證方案不能保護整個站點,那麼您可能會獲得引用匿名用戶的Principal實例。

+0

非常感謝葡萄!是的,這是它..它的工作。謝謝!!! – fareed

+1

'FacesContext.getExternalContext()。getUserPrincipal();'?它不應該像'FacesContext.getCurrentInstance()。getExternalContext()。getUserPrincipal();'?在這篇文章發佈時,JSF的一些老版本是否存在? – Tiny

+0

@Tiny,是的,如果您沒有FacesContext實例,則必須首先調用getCurrentInstance()靜態方法。 –

2

Request.getRemoteUserRequest.getUserPrincipal,依賴於您使用的身份驗證,因此,如果您使用的測試文件的境界和生產JDBC領域,將工作的境界在這兩種情況下。順便說一下,如果你使用JDBCRealm,也可以看看FlexibleJDBCRealm

+0

這個FlexibleJDBCRealm現在是否存在於GlassFish的某些版本中?它在鏈接頁面的結尾處提到,「*我一直與SUN聯繫,希望FlexibleJdbcRealm(或者具有類似靈活性的東西)將被添加到未來版本的glassfish。*」 – Tiny

+0

@tiny不是我我知道。但[郵件列表上的最後一條消息](http://wamblee.org/pipermail/flexiblejdbcrealm/2013-September/000056.html)表示,當前版本也適用於GF4。 – fvu

相關問題