[译] 学习 Spring Security(一):Maven

www.baeldung.com/spring-secu…web

做者:Eugen Paraschivspring

转载自公众号:stackgcexpress

一、概述

本文将介绍如何使用 Maven 配置 Spring Security 和介绍使用 Spring Security 依赖的具体用例。最新的 Spring Security 版本能够在 Maven Central 上获取。安全

二、Spring Security 与 Maven

2.一、spring-security-core

Spring Security 核心支持(spring-security-core)包含身份验证和访问控制功能,并支持独立(非 Web)应用、方法级安全策略和 JDBC 整合:maven

<properties>
    <org.springframework.security.version>3.2.3.RELEASE</org.springframework.security.version>
    <org.springframework.version>4.0.4.RELEASE</org.springframework.version>
</properties>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>${org.springframework.security.version}</version>
</dependency>
复制代码

请注意,咱们使用了 Spring Security 的 3.2.x.RELEASE 版本 —— Spring 和 Spring Security 的发行时间不一样,所以他们的版本号不存在对应关系。spa

若是你使用的是旧版本的 Spring,那么很是重要的一点就是:Spring Security 3.1.x 不依赖于 Spring 3.1.x 发行版!这是由于 Spring Security 3.1.x 早于 Spring 3.1 发布。将来这些依赖的版本号将逐渐靠拢 —— 有关更多详细信息,请参阅此 JIRA — 但在目前看来,这仍是有实际意义的,咱们将在下面讨论。code

2.二、spring-security-web

要为 Spring Security 添加 Web 支持,须要添加 spring-security-web 依赖:orm

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

以上包含了过滤器和相关的 Web 安全基础设施,可在 Servlet 环境中启用 URL 访问控制。xml

2.三、Spring Security 与较早的 Spring Core 依赖问题

这个新依赖跟 Maven 依赖图存在一个问题 —— 如上所述,Spring Security jar 不依赖于最新的 Spring core jar(但以前的版本不是这样)。这可能会致使较旧的依赖被使用,而不是较新的 4.x Spring 工件(artifact)。作用域

为了了解为何会发生这种状况,咱们须要看看 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 是怎样使用顺序呢 —— 优先考虑第一个,所以咱们可能会在 classpath 中使用任一版本。

为了解决这个问题,咱们在 pom 中必须明肯定义一些 Spring 依赖,而不是依赖于隐式的 Maven 依赖解析机制 —— 这样作会使咱们 pom 中的特定依赖深度为 0 (由于它自己定义在 pom 中),所以它会优先被考虑。如下全部都属于同一类别,都须要明肯定义,对于多模块项目,须要在父级的 dependencyManagement 元素中定义:

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

2.四、spring-security-config 等

要想使用 Spring Security XML 命名空间,须要添加 spring-security-config 依赖:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>${org.springframework.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。

三、使用 Snapshots 和 Milestones

Spring 在自定义 Maven 仓库中提供了 Spring Security milestones(里程碑版本) 和 snapshots(快照版本),有关配置的更多详细信息,请参阅如何使用 milestones 和 snapshots

四、结论

本文讨论了使用 Spring Security 与 Maven 的相关细节。这里提到的 Maven 依赖只是一些重要的经常使用依赖。但这也为你在 Maven 项目中使用 Spring 提供了很好的参考点。

文中相关连接

相关文章
相关标签/搜索