4

Glassfish 3.0を実行していて、ログイン認証用にJDBCRealmを実装しています。ユーザー名とロールは、usertableというテーブルに保存されます。認証は期待どおりに機能しています。

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

PS:JSFページとマネージドBeanを実装しています

4

3 に答える 3

8

ExternalContextJSFでは、から取得できるオブジェクトを使用して、リクエストに関連付けられている現在のプリンシパル、つまり現在のセッションを取得できますFacesContext。リクエストに関連付けられたプリンシパルは、次のgetUserPrincipal()メソッドを使用してExternalContextからアクセスできます。

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

上記の呼び出しは、JSFマネージドBeanで実行できます。Principalオブジェクトのメソッドを呼び出してgetName()、ユーザーの名前を文字列として取得できます。

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

于 2011-07-12T22:02:35.977 に答える
3

Request.getRemoteUserまたはRequest.getUserPrincipalは、認証に使用するレルムに依存しないため、テストにファイルレルムを使用し、本番環境にJDBCレルムを使用する場合は、どちらの場合も機能します。ちなみに、JDBCRealmを使用している場合は、FlexibleJDBCRealmもご覧ください。

于 2011-07-12T21:56:32.153 に答える
2

authenticateメソッドは、名前を含むjava.security.Principalを返す必要があります。

http://download.oracle.com/javase/1.4.2/docs/api/java/security/Principal.html

于 2011-07-12T21:57:06.753 に答える