2016-10-20 7 views
0

このコードは通常、現在ログインしているユーザーを示します。 しかし、メソッドがejbタイマーを介して開始されると、ユーザーはいません。 nullまたは例外を返す必要があります。 しかし私は大学から、私たちが文脈から別のランダムなユーザーを得たと聞きました。これはどうしたらできますか?ejbタイマーで起動したときにcallerPrincipalが結果を返さないようにする

@Resource 
private EJBContext ejbContext; 

ejbContext.getCallerPrincipal().getName(); 

誰でもこのコードをejbタイマーで開始した経験がありますか?

答えて

0

EJB 3.0仕様(以降)は言う:

EJBコンテナが getCallerPrincipal()isCallerInRole(String roleName)メソッドを経由して、エンタープライズBeanのインスタンスから呼び出し側のセキュリティコンテキスト 情報へのアクセスを提供しなければなりません。 EJBコンテナは、エンタープライズ beanのビジネス、ホーム、コンポーネント、またはメッセージリスナーインターフェイス、Web サービスエンドポイント、および/またはTimedObjectインターフェイスを介して呼び出されるビジネスメソッドの実行中に、呼び出し側のセキュリティコンテキスト情報 を提供する必要があります。表1 (87ページ)、表2(87ページ)、表3(117ページ)、表4( 197)および表10(269ページ)です。コンテナは、すべて エンタープライズBeanメソッドの呼び出しがこれらのインターフェイス いくつかのプリンシパルに関連付けられます。 呼び出し元のセキュリティIDが確立されていない場合、コンテナは認証されていないIDのコンテナの 表現を返します。コンテナは、 は、getCallerPrincipalメソッドからnullを返さないようにする必要があります。

したがって、特定のケースでは、「コンテナの認証されていないIDの表示」が表示されます。これが表示されない場合は、アプリケーションにGlassFish固有のデプロイメント記述子を介した設定がいくつか存在することが考えられます。

関連する問題