4. Spring Security の入手

このセクションでは、Spring Security バイナリの取得について知っておく必要のあるすべてについて説明します。ソースコードの入手方法については、セクション 2.3: “ ソースコード ” を参照してください。

4.1 リリース番号

Spring Security バージョンは、次のような MAJOR.MINOR.PATCH としてフォーマットされます。

  • メジャーバージョンには、重大な変更が含まれる場合があります。通常、これらは最新のセキュリティ慣行に合わせてセキュリティを改善するために行われます。
  • マイナーバージョンには拡張機能が含まれていますが、パッシブアップデートと見なされます
  • PATCH レベルは、バグを修正する変更の例外を除いて、完全に互換性があり、前方および後方にある必要があります。

4.2 Maven での使用

ほとんどのオープンソースプロジェクトとして、Spring Security は依存関係を Maven アーティファクトとしてデプロイします。このセクションのトピックでは、Maven を使用するときに Spring Security を使用する方法について詳しく説明します。

4.2.1 Spring Boot と Maven

Spring Boot は、Spring セキュリティ関連の依存関係を一緒に集約する spring-boot-starter-security スターターを提供します。スターターを使用する最も簡単で推奨する方法は、IDE 統合(EclipseIntelliJNetBeans: GitHub (英語) )または https://start.spring.io (英語) を使用して Spring Initializr (英語) を使用することです。

または、次の例に示すように、スターターを手動で追加できます。

例 4.1: pom.xml

<dependencies>
    <!-- ... other dependency elements ... -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

Spring Boot は依存バージョンを管理するために Maven BOM を提供するため、バージョンを指定する必要はありません。Spring Security バージョンをオーバーライドする場合は、次の例に示すように、Maven プロパティを指定することでオーバーライドできます。

例 4.2: pom.xml

<properties>
    <!-- ... -->
    <spring-security.version>5.2.8.BUILD-SNAPSHOT</spring-security.version>
</dependencies>

Spring Security はメジャーリリースでのみ重大な変更を行うため、Spring Boot で Spring Security の新しいバージョンを使用しても安全です。ただし、場合によっては、Spring Framework のバージョンも更新する必要があります。これを行うには、次の例に示すように、Maven プロパティを追加します。

例 4.3: pom.xml

<properties>
    <!-- ... -->
    <spring.version>5.2.9.RELEASE</spring.version>
</dependencies>

追加の機能(LDAP、OpenID など)を使用する場合は、適切な第 6 章: プロジェクトモジュールも含める必要があります。

4.2.2 Spring Boot なしの Maven

Spring Boot なしで Spring Security を使用する場合、Spring Security の BOM を使用して、プロジェクト全体で Spring Security の一貫したバージョンが使用されるようにすることをお勧めします。次の例は、その方法を示しています。

例 4.4: pom.xml

<dependencyManagement>
    <dependencies>
        <!-- ... other dependency elements ... -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-bom</artifactId>
            <version>5.2.8.BUILD-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

依存関係の最小限の Spring Security Maven セットは通常、次のようになります。

例 4.5: pom.xml

<dependencies>
    <!-- ... other dependency elements ... -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
    </dependency>
</dependencies>

追加の機能(LDAP、OpenID など)を使用する場合は、適切な第 6 章: プロジェクトモジュールも含める必要があります。

Spring Security は Spring Framework 5.2.9.RELEASE に対してビルドされますが、通常は新しいバージョンの Spring Framework 5.x で動作します。多くのユーザーは、Spring Security の推移的な依存関係が Spring Framework 5.2.9.RELEASE を解決するという事実を恐れて、奇妙なクラスパスの問題を引き起こす可能性があります。これを解決する最も簡単な方法は、次の例に示すように、pom.xml の <dependencyManagement> セクション内で spring-framework-bom を使用することです。

例 4.6: pom.xml

<dependencyManagement>
    <dependencies>
        <!-- ... other dependency elements ... -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.2.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

上記の例は、Spring Security のすべての推移的な依存関係が Spring 5.2.9.RELEASE モジュールを使用することを保証します。

[Note] メモ

このアプローチは、Maven の「部品表」(BOM)コンセプトを使用しており、Maven 2.0.9+ でのみ使用できます。依存関係の解決方法の詳細については、Maven の依存性メカニズムドキュメントの導入: Apache (英語) を参照してください。

4.2.3 Maven リポジトリ

すべての GA リリース(つまり、.RELEASE で終わるバージョン)は Maven セントラルにデプロイされるため、pom で追加の Maven リポジトリを宣言する必要はありません。

SNAPSHOT バージョンを使用する場合、次の例に示すように、Spring スナップショットリポジトリが定義されていることを確認する必要があります。

例 4.7: pom.xml

<repositories>
    <!-- ... possibly other repository elements ... -->
    <repository>
        <id>spring-snapshot</id>
        <name>Spring Snapshot Repository</name>
        <url>https://repo.spring.io/snapshot</url>
    </repository>
</repositories>

マイルストーンまたはリリース候補バージョンを使用する場合、次の例に示すように、Spring マイルストーンリポジトリが定義されていることを確認する必要があります。

例 4.8: pom.xml

<repositories>
    <!-- ... possibly other repository elements ... -->
    <repository>
        <id>spring-milestone</id>
        <name>Spring Milestone Repository</name>
        <url>https://repo.spring.io/milestone</url>
    </repository>
</repositories>

4.3 Gradle

ほとんどのオープンソースプロジェクトとして、Spring Security はその依存関係を Maven アーティファクトとしてデプロイします。これにより、ファーストクラスの Gradle サポートが可能になります。以下のトピックでは、Gradle を使用するときに Spring Security を使用する方法について詳しく説明します。

4.3.1 Spring Boot と Gradle

Spring Boot は、Spring Security 関連の依存関係を一緒に集約する spring-boot-starter-security スターターを提供します。スターターを使用する最も簡単で推奨する方法は、IDE 統合(EclipseIntelliJNetBeans: GitHub (英語) )を使用するか、https://start.spring.io (英語) を使用して Spring Initializr (英語) を使用することです。

または、次の例に示すように、スターターを手動で追加できます。

例 4.9: build.gradle

dependencies {
    compile "org.springframework.boot:spring-boot-starter-security"
}

Spring Boot は依存バージョンを管理するために Maven BOM を提供するため、バージョンを指定する必要はありません。Spring Security バージョンをオーバーライドする場合は、次の例に示すように、Gradle プロパティを提供することでオーバーライドできます。

例 4.10: build.gradle

ext['spring-security.version']='5.2.8.BUILD-SNAPSHOT'

Spring Security はメジャーリリースでのみ重大な変更を行うため、Spring Boot で Spring Security の新しいバージョンを使用しても安全です。ただし、場合によっては、Spring Framework のバージョンも更新する必要があります。これを行うには、次の例に示すように、Gradle プロパティを追加します。

例 4.11: build.gradle

ext['spring.version']='5.2.9.RELEASE'

追加の機能(LDAP、OpenID など)を使用する場合は、適切な第 6 章: プロジェクトモジュールも含める必要があります。

4.3.2 Spring Boot なしの Gradle

Spring Boot なしで Spring Security を使用する場合、Spring Security の BOM を使用して、プロジェクト全体で Spring Security の一貫したバージョンが使用されるようにすることをお勧めします。次の例に示すように、依存関係管理プラグイン: GitHub (英語) を使用してこれを行うことができます。

例 4.12: build.gradle

plugins {
    id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
    imports {
        mavenBom 'org.springframework.security:spring-security-bom:5.2.8.BUILD-SNAPSHOT'
    }
}

依存関係の最小限の Spring Security Maven セットは通常、次のようになります。

例 4.13: build.gradle

dependencies {
    compile "org.springframework.security:spring-security-web"
    compile "org.springframework.security:spring-security-config"
}

追加の機能(LDAP、OpenID など)を使用する場合は、適切な第 6 章: プロジェクトモジュールも含める必要があります。

Spring Security は Spring Framework 5.2.9.RELEASE に対してビルドされますが、通常は新しいバージョンの Spring Framework 5.x で動作します。{JB} 多くのユーザーは、Spring Security の推移的な依存関係が Spring Framework 5.2.9.RELEASE を解決するという事実を恐れて、奇妙なクラスパスの問題を引き起こす可能性があります。これを解決する最も簡単な方法は、pom.xml の <dependencyManagement> セクション内で spring-framework-bom を使用することです。これは、次の例に示すように、依存関係管理プラグイン: GitHub (英語) を使用して行うことができます。

例 4.14: build.gradle

plugins {
    id "io.spring.dependency-management" version "1.0.6.RELEASE"
}

dependencyManagement {
    imports {
        mavenBom 'org.springframework:spring-framework-bom:5.2.9.RELEASE'
    }
}

上記の例は、Spring Security のすべての推移的な依存関係が Spring 5.2.9.RELEASE モジュールを使用することを保証します。

4.3.3 Gradle リポジトリ

GA リリース(つまり、.RELEASE で終わるバージョン)はすべて Maven セントラルにデプロイされるため、GA リリースには mavenCentral() リポジトリを使用するだけで十分です。次の例は、その方法を示しています。

例 4.15: build.gradle

repositories {
    mavenCentral()
}

SNAPSHOT バージョンを使用する場合、次の例に示すように、Spring スナップショットリポジトリが定義されていることを確認する必要があります。

例 4.16: build.gradle

repositories {
    maven { url 'https://repo.spring.io/snapshot' }
}

マイルストーンまたはリリース候補バージョンを使用する場合、次の例に示すように、Spring マイルストーンリポジトリが定義されていることを確認する必要があります。

例 4.17: build.gradle

repositories {
    maven { url 'https://repo.spring.io/milestone' }
}

現行バージョンへ切り替える