1概要

この記事では、

Spring SecurityとMaven

のセットアップ方法を説明し、Spring Securityの依存関係を使用する特定のユースケースについて説明します。

最新のSpring Securityリリースはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.springframework.security%22[Maven Central]で見つけることができます。

これは前のリンクへのフォローアップです:/spring-with-maven[Spring with Mavenの記事]なので、セキュリティに依存しないSpringの依存関係の場合は、ここから始めることができます。


2 Mavenを使ったSpring Security


2.1.

スプリングセキュリティコア


Core Spring Securityのサポート –


spring-security-core


– には認証とアクセス制御機能が含まれており、スタンドアロン(Web以外の)アプリケーション、メソッドレベルのセキュリティ、JDBCをサポートしています。

<properties>
    <spring-security.version>5.0.6.RELEASE</spring-security.version>
    <spring.version>5.0.6.RELEASE</spring.version>
</properties>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>${spring-security.version}</version>
</dependency>

  • SpringとSpring Securityは異なるリリーススケジュール** にあるため、バージョン番号が常に1:1で一致するとは限りません。

Springの古いバージョンを使用している場合 – 直感に反して

Spring Security 3.1.xがSpring 3.1.xのリリースに依存しないという事実も理解することが非常に重要です。

これはSpring Security 3.1.xがリリースされたためです。春の前に3.1。将来のリリースでは、これらの依存関係をより緊密に調整することを計画しています – 詳細についてはhttps://jira.springsource.org/browse/SEC-2123[このJIRA]を参照してください – が、当面の間、これには実際的な意味があります。次に見てください。


2.2.

スプリングセキュリティウェブ


Spring Security ** のWebサポートを追加するには、

spring-security-web

依存関係が必要です。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>${spring-security.version}</version>
</dependency>

これには、サーブレット環境でURLアクセス制御を可能にするフィルタと関連Webセキュリティインフラストラクチャが含まれています。

** 2.3. Spring Securityとそれ以前のSpring Coreの依存関係


__

**

この新しい依存関係は、

Mavenの依存関係グラフ

の問題も示します – 前述のように、Spring Securityのjarファイルは最新のSpringコアjarファイルには依存しません(以前のバージョンに依存します)。これにより、これらの

古い依存関係

が新しい4.x Springアーティファクトではなくクラスパスの上に移動する可能性があります。

これが起こっている理由を理解するために、私たちは

Mavenがどのように衝突を解決するか

を調べる必要があります – バージョンの衝突の場合には、Mavenはツリーのルートに最も近いjarを選びます。私たちの場合、

spring-core



spring-orm



4.x.RELEASE

バージョンを含む)と

spring-security-core

(古い

3.2.8.RELEASE

バージョンを含む)の両方で定義されているので、どちらの場合も

spring -jdbc

は、プロジェクトのルートポムから1の深さで定義されています。そのため、実際には

spring-orm



spring-security-core

のどちらが順番に定義されているかが重要になります。最初のものが優先されるので、

クラスパスのどちらかのバージョンになる可能性があります

この問題に取り組むには、暗黙のMaven依存関係解決メカニズムに頼らずに、Springの依存関係のいくつかを明示的に定義する必要があります。 (ポンポン自体に)ので、それが優先されます。以下のすべては同じカテゴリに分類され、直接またはマルチモジュールプロジェクトの場合は、親の

dependencyManagement

要素で明示的に定義する必要があります。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>${spring-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring-version}</version>
</dependency>


2.4.

spring-security-config

その他

豊富なSpring Security XMLネームスペースを使用するには、

spring-security-config

依存関係が必要になります。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>${spring-security.version}</version>
    <scope>runtime</scope>
</dependency>

アプリケーションコードはこの依存関係に対してコンパイルすべきではないので、

runtime

** としてスコープされるべきです。

最後に、LDAP、ACL、CAS、およびOpenIDのサポートは、Spring Securityで独自の依存関係(

spring-security-ldap



spring-security-acl



spring-security-cas

および

spring-security-openid

)を持ちます。


3スナップショットとマイルストーンの使用

Spring Security

milestone

およびhttp://maven.springframework.org/snapshot/org/springframework/security/[snapshots]は、次のサイトで利用可能です。 Springが提供するカスタムのMavenリポジトリ – これらの設定方法についての詳細はリンク:/spring-with-maven#milestones[SnapshotsとMilestonesの使い方]を参照してください。


4結論

この記事では、

Spring Security with Maven

の実用的な詳細について説明します。ここに示されているMavenの依存関係はもちろん主要なもののいくつかです、そして言及する価値があるかもしれないし、まだカットをしていない他のいくつかがあります。それにもかかわらず、これはMaven対応プロジェクトでSpringを使用するための良い出発点であるはずです。