0

これが実際に本当の問題なのか、それともばかげた初心者の質問なのか、私にはよくわかりません。多分私はいくつかの点を見逃しており、この質問はかなり些細なことですので、ご容赦ください。

層と層の違いは、層が論理的な分離に関連しているのに対し、層はアプリケーションの一部の物理的な分離を暗示しているということです。

データアクセスオブジェクトなどへの直接呼び出しを行うユーザーからアプリケーションを保護するために、レイヤーを個別の層として実装できます。しかし、私の意図は、実際には別の jvm やアプリケーション サーバーを使用せずに、論理的な方法でユーザー クライアントからアプリケーションの下位レイヤーを実質的に隠すことです。どうすればこれを行うことができますか、これはパッケージングの方法に何らかの関係がありますか? (ロジックを分離するための jar、war、ears などのさまざまなアーカイブ...)。

私は実際には、レイヤード サーバー アプリケーションにセキュリティを提供することに関心があります。このアプリケーションには、制御できないさまざまなクライアントが存在する可能性があります。クライアント アプリケーション プログラマに高レベル サービスのインターフェイスを提供する場合、EJB セキュリティ アノテーションを使用して下位層も保護する必要があります。私が望んでいるのは、下位層をアプリケーション クライアントからアクセスできないようにマークすることで、より洗練された方法でこれを行うことです。

4

1 に答える 1

2

しかし、私の意図は、実際にはアプリケーションの下位レイヤーを論理的な方法でユーザー クライアントから隠すことです。つまり、実際には個別の jvm やアプリケーション サーバーを使用する必要はありません。

これらの「ユーザー クライアント」が同じ JVM 内で実行され、さらには同じアプリケーション (たとえば、同じ .war、同じ .ear) 内で実行されている場合、求めるセキュリティ レベルは表面的なものにすぎません。基本的に、自分の同僚やチーム メイトから保護します (通常、「ユーザー クライアント」は、さまざまなマシンから実行され、インターネットなどを介して到達する外部クライアントです)。

Java EE EAR アプリケーションにはいくつかのレイヤーがありますが、レイヤーは、ビジネス ロジックがビュー ロジックに直接アクセスするのを防ぐために存在します。たとえば、下位層は上位層にアクセスできません。これらのレイヤーは、クラス ローダーの分離によって相互に保護されます。具体的には、各 Web モジュールは階層の最下部にあり、他のモジュール (他の Web モジュールでさえも) はその中のコードに直接アクセスできません。EJB モジュールは 1 層下にあり、すべての Web モジュールと他の EJB モジュールがその中のコードにアクセスできます。最後に、最上位の EAR があります。これはモジュールとしてカウントされませんが、モジュール内のコードに直接アクセスできないはずのユーティリティ コードを含めることができますが、すべてのモジュール (クロスレイヤー、したがって Web モジュール) で使用できます。これにも直接アクセスできます)。

Java EE のモジュール システムは、意図したものとは異なる方法で動作しているようです。下層ではなく、上層を隠します。

複数の「協調」アプリケーションを同じアプリケーション サーバーに展開することで、モジュールの分離レベルをさらに高めることができます。次に、EJB Bean のリモート インターフェースを、隠そうとしているロジックへのゲートウェイ (ファサード) として定義できます。ただし、多くのアプリケーション サーバーは、同じ AS にデプロイされた他のアプリケーションが JNDI からローカル EJB を要求することも許可していることに注意してください。ただし、EJB 仕様ではこれが要求されていません (ただし、禁止されていません)。

さらに、private および protected アクセス修飾子の通常のメカニズムがありますが、これらはコーディング エラーから保護するためのものです。リフレクション トリックは簡単にパスされます。

次に、セキュリティ管理者です。自分のチーム メイト (「ユーザー クライアント」) からのコードを信頼できない場合は、これらの使用を検討することをお勧めします。それらを使用するのは難しいかもしれませんが、あなたが探しているものかもしれません.

于 2012-12-20T17:10:47.483 に答える