• Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理


    原文链接: Spring Security with Maven
    原文日期: 2013年04月24日
    翻译日期: 2014年06月29日
    翻译人员: 铁锚

    1. 概述

    本文通过实例为您介绍如何使用 Maven 管理 Spring Security 和 Spring 的依赖关系.最新的Spring Security发布版本可以在 Maven Central仓库 中找到. 译者建议访问MVNRespotory中org.springframework.security链接
    本文是 使用Maven管理Spring  的续集, 所以对于非 Spring Security 的其他 Spring依赖,请查看前文.

    2. Spring Security与Maven

    2.1. spring-security-core

    Spring Security的核心支持 —— spring-security-core —— 包含身份认证(authentication)和访问控制(access control)功能,支持独立的(非web)应用程序,方法级的安全性和JDBC:
    <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的发布计划和版本号并不一致 ,所以也就没有一一对应的版本号关系.

    如果您正在使用旧版本的Spring —— 也需要了解这个很不直观的事实, Spring Security 3.1.x也不依赖于Spring 3.1.x版本! 这是因为 Spring Security 3.1.x 在 Spring 3.1之前发布. Spring计划在以后的版本中将这些依赖关系尽量保持一致,想要了解更多信息可以参考 他们的JIRA计划 ,但目前肯定是不一致的,下面我们将看到具体的情况.


    2.2. spring-security-web
    要为 Spring Security 添加 Web 支持,需要添加 spring-security-web 依赖:
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${org.springframework.security.version}</version>
    </dependency>

    它包含了在Servlet环境中进行URL访问控制所需的过滤器(filter)及web相关的安全基础类.


    2.3. Spring Security 和老版本 Spring Core 的依赖问题 
    这个新的依赖也显示了 Maven依赖图的一个问题 —— 如前所述,Spring Security 的jar包依赖的不是最新的Spring core jar包(而是先前版本的). 这可能会导致出现在 classpath 中的是旧版本的依赖,而屏蔽了新版本的 Spring 4.x 项目(artifacts).
    要理解为什么会发生这种问题,我们需要看看 Maven是如何解决冲突的 —— 如果发生版本冲突,Maven将优先选择离依赖树的根(the root of the tree)最近的jar包. 在我们的例子中, spring-core 被两个地方依赖: spring-orm ( 4.x.release 版本)和 spring-security-core (依赖老的 3.2.8.RELEASE 版),所以在这两个地方, 在我们的项目中 spring-jdbc 距离 root pom 的深度为1. 因此,在我们的pom文件中 spring-orm 和 spring-security-core 定义的顺序将起决定作用 - 谁先出现谁就具有优先权, 因此我们最终可能得到的jar包版本并不确定.
    要解决这个问题,我们必须明确定义一些Spring的依赖项,而不是使用Maven 的隐式依赖解决机制 —— 我们自己定义以后可以将特定的依赖置于pom中深度为0的层级,保证优先级. 下面的部分需要置于同一个目录下,并且都需要明确定义,如果在多模块项目中,需要置于parent项目的 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.4. spring-security-config 和其他jar包

    要使用丰富的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>
    因为没有哪个应用在编译时需要依赖这个jar包,所以它的作用域(scope)应该设置为 runtime .
    最后,LDAP, ACL, CAS 和 OpenID支持对 Spring Security有自己的依赖关系: spring-security-ldap , spring-security-acl , spring-security-cas 和 spring-security-openid .

    3. 使用 Snapshots 和 Milestones 版本
    Spring Security的 Milestones(里程碑,M1,M2..)Snapshots版 在Spring自己的Maven仓库中提供 —— 关于如何配置的细节,请查看 如何使用Snapshots和Milestones版.

    4. 总结

    本文讨论了使用 Maven集成 Spring Security 实际的细节 . Maven依赖的介绍当然是最主要的部分,此外还有几个值得一提的技术点和还需要等待的地方. 不过这也算是使用Maven管理Spring项目的一个很好的起点.


  • 相关阅读:
    论学究式教育
    Oracle中rownum与order by的执行顺序
    无效存储过程问题解决
    解决SGA_MAX_SIZE 的大小比 MEMORY_TARGET 大导致数据无法启动的错误
    ORACLE 按时间创建分区表
    Timage Canvas画图
    Oracle存储过程的加密
    Win32对话框模板创建的窗口上响应键消息,Tab焦点切换消息,加速键消息
    win32 TreeCtrl控件通知消息, LVN_SELCHANGED和LVN_ITEMCHANGED用法
    win32 对话框模板添加加速键
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467008.html
Copyright © 2020-2023  润新知