質問

EJB 3テクノロジーに基づいてアプリケーションを委任する問題があります。

セッション豆のファサードパターンを使用して、エンティティビーンズからクライアント(Webアプリケーション)を切り離したいと思います。

ユーザーセッションを管理するためにSFSBを使用しています。

だから私は持っています FacadeLoginRemote メソッドをクライアントに公開するリモートインターフェイス doLogin(), doLogout(), 、など...現在、このSFSBには、 getCourse(int id), getResource(int id). 。すべてのユーザーが実際にできるわけではありません コースを入手してくださいリソースを取得します, 、そのため、ファサードはクライアントに値を返す前にいくつかのチェックを実行します。

ファサードを分割して、方法を置きたい getCourse()getResource() 彼らのための特別なクラスで、しかし FacadeLoginRemote ユーザーの特権をチェックする機能。

いくつかの異なるSLSBを作成すると、クライアントにさらされます。したがって、クライアントは、 FacadeLoginRemote.

私が間違っている?これを行う方法はありますか?

前もって感謝します、

アンドレア

役に立ちましたか?

解決

最初の1つのアドバイス。 Webアプリケーションを構築している場合は、同じアプリケーション内にWeb層とビジネス層を使用する方が典型的です。その場合、リモートする必要はありません。セッション豆は、Web層と同じJVMで実行されます。

それは、リモートインターフェイスを使用する正当な理由がないということではありません(たくさんあります)が、問題の説明を読むと、地元の豆を使用した方が良いかもしれません。

または、あなたが彼らのサーバー上の他の誰かがホストするリモートアプリケーションについて話すWebアプリケーションは、あなたのEJB豆からサービスを消費しますか?

Java EEでは、認証はWebモジュールで実行できます。特に、地元の豆を使用している場合、この認証(セキュリティプリンシパル)はEJB豆に自動的に伝播されます。特定のセキュリティロールを必要とするために、EJB豆に注釈を付けることができます。ユーザーが認証されていない場合、彼女はその役割を持っていないので、サービスは拒否されます。

その場合、クライアントが豆に直接接続しようとするかどうかは関係ありません getCourse() などの方法。

どうやって実装したのだろうか doLogin() あなたのEJBで。私の推測では、残念ながら私の知る限りでは、EJB3は特定の豆の特定の方法を介してプログラムログインを行う簡単な方法がないため、そこで何か習慣を作ったと思います。セキュリティは主に宣言的であり、その後、Beanにアクセスするときにクライアントが認証の詳細を提供する必要があります。たとえば、リモートJNDIから豆を要求する場合、リモートサーバーへの最初のJNDI接続でそれらの詳細を提供する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top