2011-07-12 27 views
2

私はGlassfish 3.0を実行しており、ログイン認証用にJDBCRealmを実装しています。ユーザー名と役割は、usertableという表に保存されます。認証は期待通りに機能しています。ログインしているユーザーのユーザー名をJDBCRealmで取得するにはどうすればよいですか?

しかし、今問題はユーザーがログインしたときに、アプリケーションでログインしているユーザーのユーザー名を取得するにはどうすればいいですか?

PS:私は、JSFページを実装し、豆

答えて

7

JSFでは、FacesContextから取り出すことができるExternalContextオブジェクトを使用して、要求したがって、現在のセッションに関連付けられた現在のプリンシパルを検索することができます。上記の呼び出しがBeanを管理JSFで行うことができる

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

:リクエストに関連付けられたプリンシパルgetUserPrincipal()方法を用いExternalContextからアクセス可能です。 PrincipalオブジェクトのgetName()メソッドを呼び出して、ユーザーの名前をStringとして取り出すことができます。

匿名ユーザーを参照するPrincipalインスタンス、認証前にプリンシパルを取得する場合、または認証スキームがサイト全体を保護しない場合は、インスタンスを取得することができます。

+0

ありがとうたくさんのvineet !!はい、それは..働いていました。感謝!!! – fareed

+1

'FacesContext.getExternalContext()。getUserPrincipal();'?それは 'FacesContext.getCurrentInstance()。getExternalContext()。getUserPrincipal();'のようなものであってはいけません。このポストの時点で、古いバージョンのJSFには存在していましたか? – Tiny

+0

@Tiny、はい、FacesContextインスタンスを持っていない場合、 'getCurrentInstance()'静的メソッドを最初に呼び出さなければなりません。 –

2

Request.getRemoteUserまたはRequest.getUserPrincipalを管理しています、あなたはテスト用ファイルレルムと生産のためのJDBCレルムを使用する場合、それが動作しますので、あなたは、認証に使用する領域とは独立して両方の場合において。ちなみに、JDBCRealmを使用している場合は、FlexibleJDBCRealmもご覧ください。

+0

現在、GlassFishのいくつかのバージョンにFlexibleJDBCRealmが存在しますか?そのリンク先のページの最後に記載されています。「*フレキシブル・データベース・リーム(または同様の柔軟性を持つもの)が、将来のバージョンのグラスフィッシュに追加されることを期待して、私はサンと連絡を取りました。」「 – Tiny

+0

@tiny私は気づいています。しかし、[メーリングリストの最後のメッセージ](http://wamblee.org/pipermail/flexiblejdbcrealm/2013-September/000056.html)では、現在のバージョンはGF4でも動作しています。 – fvu

関連する問題