Spring
DashO は、Spring Boot プロジェクトと Spring Framework プロジェクトの両方をサポートしています。詳細については、対応するセクションをお読みください。
Spring Boot
DashO では、Spring Boot の Jar ファイルおよび WAR ファイルを直接処理することができます。処理を行うには、Spring Boot の入力に Spring Boot のハンドラー型を設定する必要があります。
DashO はプロジェクトに関する情報を収集するために、Spring Boot の MANIFEST.MF
ファイルを探します。
Spring-Boot-Classes
フィールドで指定されたフォルダー(例:WAR の場合は WEB-INF/classes/
、Jar の場合は BOOT-INF/classes/
)にあるクラスは、自動的に保護する必要のある入力クラスとして扱われます。
Spring-Boot-Lib
フィールドで指定されたフォルダー(例:WAR の場合は WEB-INF/lib/
、Jar の場合は BOOT-INF/lib/
)にあるライブラリは、自動的にサポート ライブラリとして扱われます。
Start-Class
フィールドで指定されたパッケージは、自動的にプロジェクトのエントリ ポイントとして扱われます。
Spring Boot は規約に基づく、アノテーションを使用するフレームワークであるため、実行時に検出されたアノテーション付きのコンポーネントや、REST エンドポイント、データベース モデルのようなものには、クラス名/メソッド名/フィールド名にちなんだ名前が付けられます。つまり、実行時の動作が変更されるのを防ぐには、多くのものの名前が変更されてはいけないということです。アプリ内保護は実行時の動作を変更しないようにすべきですが、ソフトウェアのリバース エンジニアリングをより困難にする必要があります。実行時にすべてが正しく機能するようにするには、特定のコンポーネントを名前の変更または除去の対象から除外する必要があります。
必要な除外を構成する最も簡単な方法は、Project Wizard を使用して Web プロジェクトを作成することです。ウィザードの入力として Spring Boot パッケージを指定するだけで、パッケージを正しく保護するために必要な対象除外と設定がすべて構成されます。
Web の Project Wizard は Spring Boot の Jar または WAR を検出すると、次の処理を行います。
- Spring Boot のハンドラー型を使用するように入力を構成します。
- 重要なすべての Spring Boot アノテーション(org.springframework.* パッケージや javax.persistence.* アノテーションなど)をエントリ ポイントとして構成します。
- 除去を有効にし、Spring Boot パッケージとその他重要なパッケージを対象から除外します。
- クラスの名前変更時にパッケージ階層を保持(Renaming - Options > Classes/Packages > Packages > Maintain hierarchy)設定を有効にし、Spring Boot パッケージとその他重要なパッケージを対象から除外します。
- 合成を有効にし、Spring Boot パッケージとその他重要なパッケージを対象から除外します。
メモ: Spring Boot プロジェクトは、実行時に Spring Boot コンポーネントのスキャンを中断する可能性があるため、プロジェクトが機能するよう、クラスの名前変更時にパッケージ階層を保持(Renaming - Options > Classes/Packages > Packages > Maintain hierarchy)設定を使用します。
Spring Framework
PreEmptive Protection™ DashO™ における Spring Bean のサポートは、主として Spring Bean の特殊クラスによって提供されます。
これは、クラス名(または名前のパターン)と任意のエントリ ポイント(たとえば、init、destroy、および factory メソッド)で構成されています。
処理中、プロパティ メソッド(get*()
、is*()
、および set*(*)
)、パブリック コンストラクター、および構成されているエントリ ポイントが後に続いて、使用されていないメソッドを決定します。
クラス、構成されているエントリ ポイント、プロパティ メソッド、および非プロパティ メソッドの名前は、変更されるように設定することができます。
DashO は、各ビルド中に Spring XML ファイルをスキャンして、対応する Java クラスの名前を変更した場合には、XML ファイル内のすべてのクラス参照を更新します。 これは、直接クラス参照を更新するだけでなく、パラメーターや引数の型に挙げられているクラス名も更新します。 また DashO は、Bean プロパティの名前やエントリ ポイント メソッドの名前を変更した場合は、それらも更新します。 抽象 Bean(たとえば、クラスのない Bean 定義)では、関連するプロパティやメソッドの名前も、名前変更された Bean に関係していると見なされて更新されます。
DashO の Spring サポートを最大限に有効利用するためには、New Project Wizard を使用してプロジェクトを開始してから、必要に応じて、特殊クラスに対して個別調整を行うことをお勧めします。
New Project Wizard では、Spring XML ファイルを識別し、それらのファイルで Bean クラスの参照をスキャンして、Spring Bean の特殊クラスを構成します。 New Project Wizard は、Spring XML ファイル内の Bean 定義を検出すると、次のことを行います。
識別された
クラス
の、新しい Spring Bean 特殊クラスを作成します。XML で構成されている
init-method
属性またはdestroy-method
属性を探して、それらをエントリ ポイントとして特殊クラスに追加します。init-method
属性もdestroy-method
属性も見つからなかった場合は、それぞれdefault-init-method
属性またはdefault-destroy-method
属性を調べて、代わりにそれらをエントリ ポイントとして特殊クラスに追加します。Bean に直接構成されている
factory-method
を探して、エントリ ポイントとして特殊クラスに追加します。構成されている
lookup-method
要素またはreplaced-method
要素を探して、それらをエントリ ポイントとして特殊クラスに追加します。util:constant static-field
またはorg.springframework.beans.factory.config.FieldRetrievingFactoryBean
Bean を使用して参照されている定数値を探します。
SpringBean サンプル プロジェクトで DashO のサポートの例が示されているので、そちらをご覧ください。
メモ:
factory-bean
属性を使用している場合は、対応するfactory-method
をエントリ ポイントとして適切なクラスに手動で追加する必要があります。
replaced-method
機能を使用している場合は、名前を変更した後にarg-type
要素を使用して正しいメソッドが識別されるよう、署名を指定する必要があるかもしれません。
FieldRetrievingFactoryBean
を使用している場合、targetObject
属性はサポートされません。