使用Maven构建Spring Security应用

1.概述

本文将解释如何使用Maven构建Spring Security应用程序。将讨论使用Spring Security依赖项的特定用例。最新的Spring Security版本可以在Maven Central上找到。

这是前一篇Spring与Maven文章的后续内容,因此对于非安全性的Spring依赖项,这是开始的地方。

2. Maven与Spring Security

2.1. spring-security-core

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是在Spring 3.1之前发布的。计划是在将来的版本中更紧密地调整这些依赖关系。

2.2. spring-security-web

要为Spring Security添加Web支持,需要spring-security-web依赖项

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

它包含过滤器和相关的Web安全基础结构,可在Servlet环境中启用URL访问控制。

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都是从我们项目的根pom定义的深度为1
,在我们自己的pom中定义spring-orm和spring-security-core的顺序实际上很重要。
第一个将优先考虑,所以我们可能最终得到任何一个版本在我们的类路径上

为了解决这个问题,我们必须在自己的pom中明确定义一些Spring依赖项,不依赖于隐式Maven依赖解析机制。这样做会将特定的依赖性放在我们pom的深度0处(因为它是在pom本身中定义的)所以它将优先考虑。以下所有内容属于同一类别,需要直接或为多模块项目明确定义,在父级的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 and others

要使用丰富的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 and spring-security-openid.

3.使用快照和里程碑

Spring提供的自定义Maven存储库中提供了Spring Security里程碑和快照
有关如何配置这些内容的其他详细信息,请参阅如何使用快照和里程碑

4。结论

本文讨论了使用Spring Security与Maven的实际细节。这里介绍的Maven依赖项当然是一些主要的依赖项。还有其他几个值得一提,但是这里做了删减,不过,这应该是在启用Maven的项目中使用Spring的一个很好的起点。

使用Maven构建Spring Security应用
好书推荐、视频分享,与您一起进步