Mavenによる春のセキュリティ

Mavenを使用したSpring Security

1. 概要

この記事では、Spring Security with Mavenを設定する方法を説明し、SpringSecurityの依存関係を使用する特定のユースケースについて説明します。 最新のSpringSecurityリリースはon Maven Centralにあります。

これは以前のSpring with Maven articleのフォローアップであるため、セキュリティ以外のSpring依存関係については、ここから開始します。

2. Mavenを使用したSpring Security

2.1. spring-security-core

コアSpringセキュリティサポート–spring-security-core –には、認証およびアクセス制御機能が含まれ、スタンドアロン(非Web)アプリケーション、メソッドレベルのセキュリティ、およびJDBCがサポートされています。


    5.0.6.RELEASE
    5.0.6.RELEASE


    org.springframework.security
    spring-security-core
    ${spring-security.version}

Spring and Spring Security are on different release schedulesであるため、バージョン番号が常に1:1で一致するとは限りません。

古いバージョンのSpringを使用している場合、理解することも非常に重要です。これは、意図せずにSpring Security 3.1.x do not depend on Spring 3.1.x releases!であるという事実です。これは、Spring Security3.1.xがSpring3.1より前にリリースされたためです。 計画では、これらの依存関係を将来のリリースでより緊密に調整する予定です(詳細については、this JIRAを参照してください)が、当面は、これには、次に検討する実際的な影響があります。

2.2. spring-security-web

Web support for Spring Securityを追加するには、spring-security-webの依存関係が必要です。


    org.springframework.security
    spring-security-web
    ${spring-security.version}

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

2.3. Springのセキュリティと古いSpringCoreの依存関係の問題__

この新しい依存関係もa problem for the Maven dependency graphを示します。前述のように、Spring Security jarは最新のSpringコアjarに依存しません(ただし、以前のバージョンに依存します)。 これにより、これらのolder dependenciesが、新しい4.x Springアーティファクトではなく、クラスパスの上位に移動する可能性があります。

これが発生している理由を理解するには、Maven resolves confictsがどのように発生するかを確認する必要があります。バージョンの競合が発生した場合、Mavenはツリーのルートに最も近いjarを選択します。 この場合、spring-corespring-orm4.x.RELEASEバージョンの場合)とspring-security-core(古い3.2.8.RELEASEバージョンの場合)の両方で定義されます。どちらの場合も、spring-jdbcはプロジェクトのルートpomから1の深さで定義されます。 そのため、実際には、spring-ormspring-security-coreが独自のpomで定義されている順序が重要になります。最初の順序が優先されるため、we may end up with either version on our classpathが優先されます。

この問題に対処するには、独自のpomでexplicitly define some of the Spring dependenciesを実行する必要があり、暗黙のMaven依存関係解決メカニズムに依存しません。これを行うと、特定の依存関係がpomから深さ0になります(pom自体で定義されているため) )したがって、優先されます。 以下のすべては同じカテゴリに分類され、直接、またはマルチモジュールプロジェクトの場合は、親のdependencyManagement要素で明示的に定義する必要があります。


    org.springframework
    spring-core
    ${spring-version}


    org.springframework
    spring-context
    ${spring-version}


    org.springframework
    spring-jdbc
    ${spring-version}


    org.springframework
    spring-beans
    ${spring-version}


    org.springframework
    spring-aop
    ${spring-version}


    org.springframework
    spring-tx
    ${spring-version}


    org.springframework
    spring-expression
    ${spring-version}


    org.springframework
    spring-web
    ${spring-version}

2.4. spring-security-configおよびその他

豊富なSpringSecurity XML名前空間を使用するには、spring-security-config依存関係が必要になります。


    org.springframework.security
    spring-security-config
    ${spring-security.version}
    runtime

この依存関係に対してアプリケーションコードをコンパイルすることはできないため、scoped as runtimeにする必要があります。

最後に、LDAP、ACL、CAS、およびOpenIDのサポートには、Spring Securityに独自の依存関係があります:spring-security-ldapspring-security-aclspring-security-cas、およびspring-security-openid

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

Spring Securitymilestonessnapshotsは、Springが提供するカスタムMavenリポジトリで利用できます。これらの構成方法の詳細については、how to use Snapshots and Milestonesを参照してください。

4. 結論

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