-
Notifications
You must be signed in to change notification settings - Fork 55
Migration Guide 5.7.1_ja
- 1. 5.7.1での主な変更点
-
2. 5.7.0から5.7.1への移行手順
- 2.1. [Step 1] 依存ライブラリを更新
- 2.2. [Step 2] 共通ライブラリが管理するMavenプラグインの最新化に伴う対応
- 2.3. [Step 3] JDBCドライバーのバージョンの変更
- 2.4. [Step 4] ログインジェクションに対応したログフォーマットの修正
- 2.5. [Step 5] Spring Security OAuth(
org.springframework.security.oauth
)からSpring Security(org.springframework.security
)への移行に伴う対応 - 2.6. [Step 5-2-1] Spring Security OAuthの追加
- 2.7. [Step 5-2-2] アクセストークンの有効期限切れのデフォルト値変更に伴う対応
- 2.8. [Step 6] Spring Data 2.5.0から非推奨となったAPIへの対応
- 2.9. [Step 7] DBUnitのバージョンの変更に伴う対応
5.7.1での主な変更点は以下の通りです。
-
主要なライブラリのバージョンを更新
-
OAuth2をSpring Security OAuthからSpring Securityに移行
-
共通ライブラリの仕様を一部変更
-
ブランクプロジェクトの変更
-
Spring Boot Dependencies 2.6.2へ更新
-
Spring Framework 5.3.13へ更新
-
Spring Security 5.6.0へ更新
-
-
MyBatis 3.5.7へ更新
OAuth2について、Spring Security OAuth(org.springframework.security.oauth
)からSpring Security(org.springframework.security
)の機能を使用するように修正しました。これに伴い、共通ライブラリの依存関係からSpring Security OAuthを削除しました。
ガイドラインのSpring Security OAuthについての記載は、 Appendix に移動しています。
-
共通ライブラリのライブラリ及びMavenプラグインのバージョンを変更
-
[#1086] Update the version of maven-plugin
-
[#1121] Apply MyBatis 3.5.7
-
[#1122] Apply jakarta.inject-api 1.0.5
-
[#1123] Apply poi-ooxml 4.1.2
-
[#1124] Apply Google Guava 30.1.1-jre
-
[#1125] Apply Bouncy Castle Provider 1.69
-
[#1126] Apply commons-io 2.11.0
-
[#1134] Apply Dozer 6.5.2
-
[#1141] Apply Spring Boot 2.6.1
-
[#1149] Remove the dependency spring-security-oauth2
-
[#1153] Update commons-compress
-
-
ブランクプロジェクトのライブラリ及びMavenプラグインのバージョンを変更
-
[single#498] [multi#548] Update the version of maven-plugin
-
[single#506] [multi#554] Apply dbunit 2.7.2
-
[single#512] [multi#560] Match postgresql and ojdbc versions with Spring Boot
-
-
脆弱性対応のため、ブランクプロジェクトのログフォーマットを変更
-
[single#516] [multi#564] Change the log format to address the vulnerability
-
移行手順は、以下の通りです。
凡例
Required : 手順の適用は必須
Required by case : 手順の適用は条件付きで必須
Optional : 手順の適用を推奨 (必要に応じて手順の適用を実施)
- : 手順の適用は必要なし
[全般]
ステップ | 手順 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
1. |
依存ライブラリを更新 |
Required |
Required |
[共通ライブラリ]
ステップ | 手順 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
2. |
共通ライブラリが管理するMavenプラグインの最新化に伴う対応 |
Required by case |
Required by case |
[Blank project]
ステップ | 手順 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
3. |
JDBCドライバーのバージョンの変更 |
Optional |
Optional |
4. |
ログインジェクションに対応したログフォーマットの修正 |
Optional |
Optional |
[Spring Security]
ステップ | 手順 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
5. |
Spring Security OAuth( |
Optional |
Optional |
[Spring Data]
ステップ | 手順 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
6. |
Spring Data 2.5.0から非推奨となったAPIへの対応 |
Required by case |
Required by case |
[DBUnit]
ステップ | 手順 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
7. |
DBUnitのバージョンの変更に伴う対応 |
Required by case |
Required by case |
TERASOLUNA Server Framework for Java (5.x)の共通ライブラリと依存ライブラリを更新してください。
以下に、この手順により更新される代表的な依存ライブラリを示します。
ライブラリ名 | 更新前バージョン | 更新後バージョン | 備考 |
---|---|---|---|
TERASOLUNA Server Framework for Java (5.x) Common Library |
5.7.0.RELEASE |
5.7.1.RELEASE |
|
Spring Framework |
5.3.2.RELEASE |
5.3.13 |
|
Spring Data |
2.4.2 |
2.6.0 |
|
Spring Security |
5.4.2 |
5.6.0 |
|
Spring Security OAuth2 |
2.5.0.RELEASE |
- |
削除しました。 |
MyBatis3 |
3.5.6 |
3.5.7 |
|
Jakarta Dependency Injection |
1.0.3 |
1.0.5 |
|
Apache POI |
4.1.1 |
4.1.2 |
|
Google Guava |
27.0.1-jre |
30.1.1-jre |
|
Bouncy Castle Provider |
1.64 |
1.69 |
|
Apache Commons IO |
2.6 |
2.11.0 |
|
Dozer |
6.5.0 |
6.5.2 |
|
Apache Commons Compress |
1.19 |
1.21 |
CVE-2021-36090 が存在するためバージョンアップしました。Apache Commons CompressはTERASOLUNAが依存しているライブラリではありませんが、Apache POI が依存関係に持つため、独自にバージョンを上げています。 |
[手順が必要なケース]
この手順の適用は必須です。
この更新手順は、 mvn archetype を使用して作成したプロジェクト向けです。
親プロジェクトのPOMファイルのversion
を5.7.1.RELEASE
に修正してください。
-
(
$YOUR_MULTIPLE_PROJECT_ROOT/pom.xml
)
<!-- omitted -->
<parent>
<groupId>org.terasoluna.gfw</groupId>
<artifactId>terasoluna-gfw-parent</artifactId>
<version>5.7.1.RELEASE</version> <!-- ### 修正箇所 ### -->
</parent>
<!-- omitted -->
この更新手順は、 mvn archetype を使用して作成したプロジェクト向けです。
プロジェクトのPOMファイルのversion
を5.7.1.RELEASE
に修正してください。
-
(
$YOUR_SINGLE_PROJECT/pom.xml
)
<!-- omitted -->
<parent>
<groupId>org.terasoluna.gfw</groupId>
<artifactId>terasoluna-gfw-parent</artifactId>
<version>5.7.1.RELEASE</version> <!-- ### 修正箇所 ### -->
</parent>
<!-- omitted -->
共通ライブラリが管理するMavenプラグインの最新化を行いました。
バージョンの更新以外に下記の変更を行いました。
-
プラグインのバージョンを指定するプロパティ名を
groupId.artifactId.pugin.version
に変更しました。 -
cargo-maven2-plugin
の名称をcargo-maven3-plugin
に変更しました。 -
mvn site
コマンド実行時にWarningが発生するため、reporting要素内にmaven-project-info-reports-plugin
を追加しました。
アプリケーションで独自にプラグインのバージョンを指定していない場合、自動的にアップグレードされビルドの挙動に変更が生じる可能性があります。なお、本手順ではApache Mavenのバージョンを3.8.3で使用することを前提としています。
Tip
|
Apache Maven 3.8.1 以降では、 Release Notes – Maven 3.8.1 で説明されている通り、外部の安全ではないHTTPのURLはブロックされます。 |
最新化されたプラグインのバージョンについては、以下を参照してください。
[手順が必要なケース]
以下のケースに当てはまる場合、ビルドの挙動を確認して必要に応じて修正を行ってください。
-
アプリケーションで独自にプラグインのバージョンを指定していない
[修正方法]
プラグインごとに対応方法が異なるため、各公式リファレンスを参照して対応してください。
なお、プラグインを5.7.0までのバージョンに戻す場合はterasoluna-gfw-parentのpom.xmlに定義されたプロパティを上書きします。 例えば Maven Dependency Plugin のバージョンを戻す場合は以下のように定義します。
-
pom.xml
<properties>
<!-- omitted -->
<org.apache.maven.plugins.maven-dependency-plugin.version>3.1.2</org.apache.maven.plugins.maven-dependency-plugin.version> <!-- ### 追加箇所 ### -->
</properties>
ブランクプロジェクトのpomファイルで、 PostgreSQL JDBC Driver と Oracle JDBC のバージョン定義を更新しました。
これらのJDBCドライバーは上位互換性が保障されているため、最新バージョンを使用することを推奨します。
[手順が必要なケース]
この手順の適用は任意ですが、修正を行うことを推奨します。
以下の情報を参照し、適切なバージョンを設定してください。
以降では、 TERASOLUNA Server Framework for Java 5.7.1.RELEASE の動作検証環境に合わせる形での変更方法を示します。
[修正方法]
pomファイルのプロパティを修正してください。
-
pom.xml
<properties>
<!-- omitted -->
<postgresql.version>42.3.1</postgresql.version> <!-- ### 修正箇所 ### -->
<!-- omitted -->
</properties>
以下の情報を参照し、適切なバージョンを設定してください。
以降では、 TERASOLUNA Server Framework for Java 5.7.1.RELEASE の動作検証環境に合わせる形での変更方法を示します。
[修正方法]
プロジェクトのpom.xmlを更新します。利用するJDKのバージョンによってドライバが異なるため、注意してください。
-
pom.xml
<dependencyManagement>
<dependencies>
<!-- omitted -->
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>>
<version>${ojdbc.version}</version>
</dependency>
<!- omitted -->
</dependencies>
</dependencyManagement>
<properties>
<!-- omitted -->
<ojdbc.version>21.3.0.0</ojdbc.version> <!-- ### 修正箇所 ### -->
<!-- omitted -->
</properties>
-
pom.xml
<dependencyManagement>
<dependencies>
<!-- omitted -->
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc10</artifactId>
<version>${ojdbc.version}</version>
</dependency>
<!- omitted -->
</dependencies>
</dependencyManagement>
<properties>
<!-- omitted -->
<ojdbc.version>19.12.0.0</ojdbc.version> <!-- ### 修正箇所 ### -->
<!-- omitted -->
</properties>
ログフォーマットを変更することで、ログインジェクションへの対策を行ってください。
本手順を行うことで、ユーザの悪意のある入力等によって偽装されたログエントリが挿入された際、インデントを付加することによって 偽装されたログを判別できるようになります(ログエントリの挿入自体を防ぐことができるわけではありません)。
[手順が必要なケース]
この手順の適用は任意ですが、偽装されたログを判別しやすくなるため、本手順の実施を推奨します。
[修正方法]
プロジェクトのsrc/main/resources/logback.xmlを更新します。
logback.xmlの<pattern>に設定されているログフォーマットを以下のように変更します。
-
%msg
を%replace(%msg){'(\r\n|\r|\n)','$1 '}
に変更 -
末尾に
%replace(%replace(%xEx){'(\r\n|\r|\n)','$1 '}){' $',''}%nopex
を付与
※スタックトレースの書式が既に設定されている場合は、%xEx
の部分を設定済みの書式に読み替え、設定済みの書式と上記のフォーマットを入れ替える
下記の変更は、ブランクプロジェクトと同様、スタックトレースの書式設定がないコンソールログに半角スペース2文字のインデントを挿入する例です。 これを参考に、プロジェクトのログ出力設定に応じて適切なログフォーマットの変更を行ってください。
【変更前】
-
logback.xml
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy/MM/dd HH:mm:ss}] [%thread] [%-22logger{22}] [%-5level] %msg%n</pattern>
</encoder>
</appender>
【変更後】
-
logback.xml
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy/MM/dd HH:mm:ss}] [%thread] [%-22logger{22}] [%-5level] %replace(%msg){'(\r\n|\r|\n)','$1 '}%n%replace(%replace(%xEx){'(\r\n|\r|\n)','$1 '}){' $',''}%nopex</pattern>
</encoder>
</appender>
2.5. [Step 5] Spring Security OAuth(org.springframework.security.oauth
)からSpring Security(org.springframework.security
)への移行に伴う対応
Spring Security OAuthが 2022年5月28日にEOL となるため、共通ライブラリの依存関係からSpring Security OAuthを削除しました。これにより、5.7.0まで開発ガイドラインで解説していた実装を変更する必要が生じます。
[手順が必要なケース]
この手順の適用は任意ですが、修正を行うことを推奨します。
以下のすべてのケースに当てはまる場合、ガイドラインの実装を参考にSpring Securityへ移行することが出来ます。
-
開発ガイドラインに準拠して、Spring Security OAuthを使用しクライアントまたはリソースサーバーの実装を行っている
-
認可コードグラントを実装している
[修正方法]
開発ガイドラインを参考にして、修正を行ってください。
プロジェクトのpom.xmlにSpring Security OAuthのライブラリを追加してください。
-
pom.xml
<dependencies>
<!-- omitted -->
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.5.1.RELEASE</version>
</dependency>
<!-- omitted -->
</dependencies>
Spring Security OAuth 2.5.1から、アクセストークンの有効期限切れの考慮に 30秒の遅延時間 が設定されました。これにより、Spring Security OAuth 2.5.0に比べ30秒早く有効期限が切れたと判断されるようになります。
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
開発ガイドラインのAppendixに準拠して、Spring Security OAuthを使用しクライアント及び認可サーバーの実装を行っている
-
アクセストークンの有効期限が30秒未満または有効期限を厳密に求められる
[修正方法]
access_token_validity
及びrefresh_token_validity
の設定値を、30秒の遅延時間を考慮して設定してください。
例えば、60秒でアクセストークンの有効期限切れ、90秒でリフレッシュトークンの有効期限切れとしたい場合、認可サーバー側でアクセストークンの有効期限を90秒、リフレッシュトークンの有効期限を120秒に設定する必要があります。
Spring Data 2.5.0からいくつかのAPIが非推奨となりました。本フレームワークで利用するものは以下の通りです。
-
JpaRepository#deleteInBatch(Iterable)
メソッド
5.7.0.RELEASEまでの開発ガイドラインでは紹介していませんが、以下のAPIも非推奨となりました。
-
JpaRepository#getOne(ID)
メソッド
Spring Data 2.5.3の非推奨APIについては、以下を参照してください。
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
上記の非推奨APIを利用している
[修正方法]
Javadocを参考に、非推奨APIを代替APIに置き換えてください。
JpaRepository#getOne(ID)
メソッドの代替APIである JpaRepository#getById(ID)
メソッドの使用上の注意に関しては Spring Data提供のインタフェースを継承する を参照してください。
5.7.0までの開発ガイドラインにおける 10.1.2.2. 単体テストで利用するOSSライブラリのバージョン のWarningに記載していたApach POIについて、DBUnitのバージョンを2.7.1 以上に更新することで解消されることを確認しました。これにより、共通ライブラリで管理しているApache POIのバージョンを使用することが出来ます。ただし、DBUnit 2.7.1からApach POIの依存関係はoptionalとなったため、Apach POIを使用するためにはプロジェクトのpom.xmlに依存関係を追加する必要があります。
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
Apach POIのバージョンを 開発ガイドラインの単体テスト に準拠して3.17で使用している
[修正方法]
pomファイルのプロパティを修正及び依存関係の追加を行ってください。
-
pom.xml
<dependencies>
<!-- omitted -->
<!-- ### 追加箇所 開始 ### -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<scope>test</scope>
</dependency>
<!-- ### 追加箇所 終了 ### -->
</dependencies>
<!-- omitted -->
<properties>
<!-- omitted -->
<dbunit.version>2.7.2</dbunit.version> <!-- ### 修正箇所 ### -->
<!-- omitted -->
<poi.version>3.17</poi.version> <!-- ### 削除箇所 ### -->
<!-- omitted -->
</properties>