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-coreはspring-orm(4.x.RELEASEバージョンの場合)とspring-security-core(古い3.2.8.RELEASEバージョンの場合)の両方で定義されます。どちらの場合も、spring-jdbcはプロジェクトのルートpomから1の深さで定義されます。 そのため、実際には、spring-ormとspring-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-ldap、spring-security-acl、spring-security-cas、およびspring-security-openid。
3. スナップショットとマイルストーンの使用
Spring Securitymilestonesとsnapshotsは、Springが提供するカスタムMavenリポジトリで利用できます。これらの構成方法の詳細については、how to use Snapshots and Milestonesを参照してください。
4. 結論
この記事では、Spring Security with Mavenの使用に関する実際的な詳細について説明します。 ここで紹介するMavenの依存関係は、もちろん主要なものの一部であり、言及する価値があり、まだカットしていない他のいくつかのものがあります。 それでも、これはMaven対応プロジェクトでSpringを使用するための良い出発点になるはずです。