店に。
Principal user = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
ユーザーの名前で:フォームを使用して、コンテナに認証プロセスを委任している場合は、BASICやダイジェスト認証を、あなたは次のコードを使用して、現在の要求に関連付けられているPrincipal
オブジェクトを取得することができます領域はuser.getName()
メソッドを使用して取得できます。内部では、コンテナはHttpSession
インスタンスにPrincipalオブジェクトを格納しますが、ほとんどのコンテナではHttpSession.getAttribute(...)
メソッドを使用する属性としてアクセスできません。
EJBのビジネスメソッドが呼び出されたときにPrincipalオブジェクトもサーブレットコンテナによって自動的にEJBコンテナに伝播され、SessionContext
インターフェイスを使用してアクセスできます。 EJBでは、校長への参照を取得するために、次のことを実行することができます。
@Resource
private SessionContext ctx;
public void businessMethod()
{
Principal user = ctx.getCallerPrincipal();
...
}
あなたが、しなければならないあなたはコンテナに認証を委任していない、代わりに、あなたがあなた自身のスキームを使用して認証を実行している場合認証が成功すると、HttpSessionオブジェクトにユーザーのIDへの参照を格納し、セッションの無効化時にこれをクリアする必要があります。他のスコープに保存することはお勧めできません。これは、HttpSessionオブジェクトの有効期間がアプリケーションのユーザーセッションと同じであるためです。
データベースに書き込む必要があるすべてのBeanでこのセッション値を呼び出すには、どこのどこからでも参照できるように、アプリケーション内に共通のクラスをいくつか置く必要がありますか? – user75ponic
はい、セッションオブジェクトを返す静的メソッドgetContextSession()を持つContextクラスがあります:Context.getContextSession() – othman