3

私はこの構造を持つロボット工学のプログラムに取り組んでいます(笑いのためにレイヤーが何をするかを含めます)

  • レイヤ A -ボタン、ジョイスティックなどを処理するための GUI のシンプルなインターフェイス。これらの値をコマンドに変換して、コントロール インターフェイスに送信します。

  • レイヤ B - コントロールは、データベースの新しいデバイス書き込みエントリを計算するために、データベースからのデバイス読み取り/書き込みエントリと GUI からのコマンド要求を評価します。

  • レイヤ C -デバイスのデータベース論理表現。デバイスから読み書きされた値の履歴を作成します。

  • レイヤ D - ハードウェアは物理ハードウェアと通信します。デバイス書き込みエントリをコマンドに変換し、デバイスに送信します。デバイスからの値でデータベース device-read-entries を更新します。

その上または下に複数のレイヤーがある関数を呼び出すことができるレイヤーがない Java アプリケーションを作成したいと考えています。

パッケージのプライバシーを使用してプロジェクト構造を作成することは可能ですか? または、レイヤー D または C から何かをインポートするために、レイヤー A などのコードを不可能にするファクトリのようなパターンを作成することは可能ですか?

4

2 に答える 2

2

これは、アクセス修飾子のみを使用して実現できるものではありません。

importJava言語はインポートに(追加の)制限を課さないため、(どういうわけか)制御することによってもそれを行うことはできません。(importディレクティブは、完全修飾名をどこでも使用する必要がないように、実際には単なる構文糖衣です。)

それで、他に何ができますか?

  • ランタイム制限を実装して、間違ったレイヤーがファクトリ オブジェクトにアクセスするのを防ぐことができます。しかし、そのような制限は、意図的または偶然によって簡単に覆されます。

  • ある種の内部「機能」または「資格」メカニズムを使用できますが、資格情報の漏えいを防ぐ方法を理解するのは困難です。(クレデンシャルがセキュリティ マネージャー (以下を参照) によって管理されている場合、それは機能する可能性がありますが、問題はより複雑になります。)

あなたができると思う唯一の方法は、カスタムを実装し、SecurityManagerレイヤークロスコールの可能性があるたびにセキュリティチェックを実装することです。たとえば、セキュリティ マネージャがコール スタックをチェックして、それを呼び出したメソッド / クラス / パッケージを見つけることは可能です (費用はかかりますが)。また、セキュリティ マネージャを (自明に) 破壊するために使用できる特定の反映操作をオフにする必要があります。基本的に、内側のリングを除くすべてを「信頼できない」コードとして扱う必要があります。

率直に言って、「ハッカーに強い」セキュリティを備えた JVM でこの種のものを実装することは、おそらく人間の能力を超えています。(Sun / Oracle はまだ成功していない....)


他の選択肢は次のとおりです。

  • プログラマーの規律に頼る。

  • コードベースの静的分析に依存します。たとえば、アクセス ルールを文書化する注釈によって支援されます。これを行うには、独自のコード アナライザーを作成する必要があります。

  • アドレス空間の分離と、フットプリントが小さく、レイヤー間でセキュリティを重視した API を使用します。(ここでは、単一の従来型の JVM について話しているわけではありません ...)

于 2015-07-19T01:45:28.480 に答える