Spring Security с Maven

Spring Security с Maven

1. обзор

В этой статье объясняется, как настроитьSpring Security with Maven, и будут рассмотрены конкретные варианты использования зависимостей Spring Security. Последние выпуски Spring Security можно найти вon Maven Central.

Это продолжение предыдущегоSpring with Maven article, поэтому для зависимостей Spring, не связанных с безопасностью, это место для начала.

2. Spring Security с Maven

2.1. spring-security-coreс

Поддержка Core Spring Security -spring-security-core - содержит функции аутентификации и контроля доступа, а также поддерживает автономные (не веб) приложения, безопасность на уровне методов и 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 Security 3.1.x был выпущен до Spring 3.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 в среде сервлета.

2.3. Проблема безопасности Spring и старых версий ядра Spring __

Эта новая зависимость также показываетa problem for the Maven dependency graph - как упоминалось выше, jar-файлы Spring Security не зависят от последних jar-файлов ядра Spring (но от предыдущей версии). Это может привести к тому, что этиolder dependenciesпоявятся на вершине пути к классам вместо более новых артефактов Spring 4.x.

Чтобы понять, почему это происходит, нам нужно посмотреть, какMaven resolves conficts - в случае конфликта версий Maven выберет банку, ближайшую к корню дерева. В нашем случаеspring-core определяется какspring-orm (с версией4.x.RELEASE), так иspring-security-core (со старой версией3.2.8.RELEASE) - так что в В обоих случаяхspring-jdbc определяется на глубине 1 от корневого pom нашего проекта. Из-за этого на самом деле будет иметь значение, в каком порядкеspring-orm иspring-security-core определены в нашем собственном pom - первый будет иметь приоритет, поэтомуwe may end up with either version on our classpath.

Чтобы решить эту проблему, нам придется использоватьexplicitly define some of the Spring dependencies в нашем собственном pom и не полагаться на неявный механизм разрешения зависимостей Maven - это поместит эту конкретную зависимость на глубину 0 от нашего pom (как она определена в самом 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 и другие

Чтобы использовать богатое пространство имен Spring Security 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 доступны в настраиваемых репозиториях Maven, предоставляемых Spring - дополнительные сведения о том, как их настроить, см. Вhow to use Snapshots and Milestones.

4. Заключение

В этой статье обсуждаются практические детали использованияSpring Security with Maven. Зависимости Maven, представленные здесь, являются, конечно, одними из основных, и есть несколько других, о которых стоит упомянуть, и которые еще не были сокращены. Тем не менее, это должно стать хорошей отправной точкой для использования Spring в проекте с поддержкой Maven.