2

現在/ログに記録されているユーザーを取得するメソッドを持つステートレス Bean があります。それを取得するための私のコード:

Principal p1 = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();

しかし、これでnullpointer例外が発生しています。何故ですか?

または、ログに記録されたユーザーを取得する他の方法はありますか? 私はウェブロジックを使用しています。

4

2 に答える 2

3

FacesContextEJB でを取得することは想定されていません。さらに、EJB は JSF の依存関係から完全に解放されている必要があります。javax.faces.*つまり、 EJB 内のパッケージからコードをインポートしないでください。EJB は、JSF、JAX-RS、Struts、Spring-MVC、さらには「プレーン バニラ」サーブレットなど、考えられるすべての異なるフロントエンドで再利用できるように設計する必要があります。

コンテナー管理のセキュリティまたは Apache Shiro のようなセキュリティ フレームワークを使用している場合は、そのために API が提供する機能を使用することになっています。「プレーン バニラ」コンテナー管理セキュリティ (JAAS 経由などweb.xml) の場合、.SessionContextjavax.ejb@Resource

@Resource
private SessionContext context;

public void doSomething() {
    Principal principal = context.getCallerPrincipal();
    // ...
}

別の方法として、ログインしているユーザーの JPA エンティティ表現をメソッド引数として渡すこともできます。

于 2013-11-04T17:04:07.847 に答える