Glassfish 3.0を実行していて、ログイン認証用にJDBCRealmを実装しています。ユーザー名とロールは、usertableというテーブルに保存されます。認証は期待どおりに機能しています。
しかし、問題はユーザーがログインしたときに、アプリケーションでログインしたユーザーのユーザー名を取得するにはどうすればよいですか?
PS:JSFページとマネージドBeanを実装しています
Glassfish 3.0を実行していて、ログイン認証用にJDBCRealmを実装しています。ユーザー名とロールは、usertableというテーブルに保存されます。認証は期待どおりに機能しています。
しかし、問題はユーザーがログインしたときに、アプリケーションでログインしたユーザーのユーザー名を取得するにはどうすればよいですか?
PS:JSFページとマネージドBeanを実装しています
ExternalContext
JSFでは、から取得できるオブジェクトを使用して、リクエストに関連付けられている現在のプリンシパル、つまり現在のセッションを取得できますFacesContext
。リクエストに関連付けられたプリンシパルは、次のgetUserPrincipal()
メソッドを使用してExternalContextからアクセスできます。
FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
上記の呼び出しは、JSFマネージドBeanで実行できます。Principalオブジェクトのメソッドを呼び出してgetName()
、ユーザーの名前を文字列として取得できます。
Principal
認証前にプリンシパルを取得する場合、または認証スキームがサイト全体を保護しない場合は、匿名ユーザーを参照するインスタンスを取得できることに注意してください。
Request.getRemoteUserまたはRequest.getUserPrincipalは、認証に使用するレルムに依存しないため、テストにファイルレルムを使用し、本番環境にJDBCレルムを使用する場合は、どちらの場合も機能します。ちなみに、JDBCRealmを使用している場合は、FlexibleJDBCRealmもご覧ください。
authenticateメソッドは、名前を含むjava.security.Principalを返す必要があります。
http://download.oracle.com/javase/1.4.2/docs/api/java/security/Principal.html