2

EJB 3 テクノロジに基づくアプリケーションの開発に問題があります。

セッション Bean で Facade パターンを使用して、エンティティ Bean からクライアント (Web アプリケーション) を分離したいと考えています。

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

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

Facade を分割し、メソッドgetCourse()を特別なクラスに配置して、ユーザーの権限をチェックする機能にgetResource()任せたいと思います。FacadeLoginRemote

いくつかの異なる SLSB を作成する場合は、それらをクライアントに公開します。そのため、クライアントは からのチェックを回避して直接接続する可能性がありますFacadeLoginRemote

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

前もって感謝します、

アンドレア

4

1 に答える 1

2

最初に一言アドバイス。Web アプリケーションを構築している場合は、Web 層とビジネス層を同じアプリケーション内に配置するのがより一般的です。その場合、リモーティングの必要はありません。セッション Bean は、Web 層と同じ JVM で実行されます。

リモートインターフェイスを使用する正当な理由がないと言っているわけではありません (たくさんあります) が、問題の説明を読むと、ローカル Bean を使用した方がよいように思えます。

それとも、あなたが言う Web アプリケーションは、他の誰かがサーバー上でホストするリモート アプリケーションであり、EJB Bean からサービスを利用しますか?

Java EE では、認証は Web モジュールで行うことができます。特に、ローカル Bean を使用している場合、この認証 (セキュリティ プリンシパル) は自動的に EJB Bean に伝達されます。EJB Bean にアノテーションを付けて、特定のセキュリティ ロールを要求することができます。ユーザーが認証されていない場合、ユーザーにはその役割がなく、サービスは拒否されます。

その場合、クライアントがgetCourse()etc メソッドを持つ Bean に直接接続しようとしても問題ありません。

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

于 2011-01-09T16:09:26.967 に答える