2011-07-20 13 views
0

JSF 1.1を使用している小さなアプリケーションがあります。認証にNTLMを使用しています。ログインに最適な方法ユーザーID

ログインしたuser_idを保存する最良の方法は、すべてのJavaクラスでアプリケーションで使用できるようにするためです。user_idは、ほとんどすべてのjsfページのJavaクラスに使用されます。

助けを借りると非常に感謝します。これは、あなたが認証を実行しているかに依存するであろう

session=FacesContext.getExternalContext().getSession(); 
session.setAttribute("user_id",user_id); 

答えて

1

店に。

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オブジェクトの有効期間がアプリケーションのユーザーセッションと同じであるためです。

+0

データベースに書き込む必要があるすべてのBeanでこのセッション値を呼び出すには、どこのどこからでも参照できるように、アプリケーション内に共通のクラスをいくつか置く必要がありますか? – user75ponic

+0

はい、セッションオブジェクトを返す静的メソッドgetContextSession()を持つContextクラスがあります:Context.getContextSession() – othman

1

感謝のWebセッションで

+0

私はEJBを使用しません。 HTTPSessionオブジェクトの格納方法に関するサンプルをご提供いただきありがとうございますか? – user75ponic

+0

@Polappan、それは他の答えで提供されています。 –

関連する問題