2017-02-14 7 views
0

私は以下の設定をしています:Wildfly 9サービングリモートEJBクライアントといくつかのロジックを実行するいくつかのTimerTaskインスタンスを実行しています。Wildfly 9で匿名ユーザーとして安全なEJBにアクセスする

ほとんどのEJBメソッドはリモートクライアントから呼び出されるため、@RolesAllowedを介して保護されます。 これらのメソッドのいくつかは、サーバー内でTimerTaskによって呼び出されます。この場合、プリンシパルコンテキストまたはセキュリティコンテキストがないため、EJBメソッド呼び出しが失敗します。

私の回避策は次のようである:

EJB:

@RolesAllowed({"readRole"}) 
public void readSomething() { 
    this.readSomethingImpl(); 
} 


public void readSomethingUnrestricted() { 
    this.readSomethingImpl(); 
} 

readSomething()は、リモートインタフェース、readSomethingUnrestricted(の一部)は、ローカルインタフェースの一部です。

欠点は、私はかなり大量のEJBサービスメソッドを持っており、それらのすべてを複製したくないということです(リモート用に制限されているもの、ローカル呼び出し用に制限のないもの)。

これを実装する方法はありますか?

ありがとうございます!

答えて

0

@javax.annotation.security.RunAs("readRole")でタイマータスクに注釈を付けることで、目的を達成できるはずです。

+0

ありがとうSteve。残念ながら問題は残っています。ドキュメントを見ると、このアノテーションはクラスレベルにあります。まだ同じエラーが発生しています。おそらく、私のTimerTaskが、同じEARのJAR内のEJBに「話す」ことを試みるEAR内部のWARの一部であるという違いがあります。 –

関連する問題