Рубрики
Без рубрики

Весенняя безопасность с Maven

Spring Security with Maven – фокусируется на pom и зависимостях

Автор оригинала: Eugen Paraschiv.

1. Обзор

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

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

2. Весенняя Безопасность С Maven

2.1. пружина-безопасность-ядро

Основная поддержка Spring Security support – spring-security-core – содержит функции аутентификации и контроля доступа. Эта зависимость обязательна для включения во все проекты, использующие Spring Security.

Кроме того, spring-security-core поддерживает автономные (не веб -) приложения, безопасность на уровне методов и JDBC:


    5.3.4.RELEASE
    5.2.8.RELEASE


    org.springframework.security
    spring-security-core
    ${spring-security.version}

Обратите внимание , что Spring и Spring Security находятся в разных графиках выпуска , поэтому не всегда существует совпадение 1:1 между номерами версий.

Если вы работаете со старыми версиями Spring – также очень важно понимать тот факт, что, неинтуитивно, Spring Security 4.1.x не зависят от релизов Spring 4.1.x! Например, когда Spring Security 4.1.0 был выпущен, Spring core framework уже был в версии 4.2.x и, следовательно, включает эту версию в качестве своей зависимости от компиляции. План состоит в том, чтобы более точно выровнять эти зависимости в будущих выпусках – см. this JIRA для получения более подробной информации – но в настоящее время это имеет практические последствия, которые мы рассмотрим далее. 2.2. spring-security-web

Чтобы добавить Веб-поддержку Spring Security , нам нужна spring-security-web зависимость:


    org.springframework.security
    spring-security-web
    ${spring-security.version}

Он содержит фильтры и связанную с ними инфраструктуру веб-безопасности, которая обеспечивает контроль доступа к URL-адресам в среде сервлетов.

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

Эта новая зависимость также демонстрирует проблему для графа зависимостей Maven. Как уже упоминалось выше, Spring Security jars зависит не от последних Spring core jars (а от предыдущей версии). Это может привести к тому, что эти старые зависимости пробьются поверх пути к классу вместо более новых артефактов 5.x Spring.

Чтобы понять, почему это происходит, нам нужно посмотреть, как Maven разрешает конфликты. В случае конфликта версий Maven выберет банку, которая находится ближе всего к корню дерева. Например, spring-core определяется как spring-orm (с версией 5.0.0 .RELEASE ), так и spring-security-core (с версией 5.0.2.RELEASE ). Таким образом, в обоих случаях spring-jdbc определяется на глубине 1 от корневого pom нашего проекта. Из-за этого на самом деле будет иметь значение, в каком порядке spring-orm и spring-security-core определены в нашем собственном pom. Первый из них будет иметь приоритет, так что мы можем получить любую версию на нашем пути к классу .

Чтобы решить эту проблему, нам придется явно определить некоторые из зависимостей Spring в нашем собственном стихотворении и не полагаться на неявный механизм разрешения зависимостей Maven. Это поставит эту конкретную зависимость на глубину 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 и другие

Чтобы использовать богатое пространство имен XML Spring Security и аннотации, нам понадобится зависимость spring-security-config :


    org.springframework.security
    spring-security-config
    ${spring-security.version}

OpenID, OpenID и поддержка LDAP, ACL, CAS, OAuth и OpenID имеют свои собственные зависимости в Spring Security: spring-security-ldap , spring-security-acl , spring-security-cas, spring-security-oauth и spring-security-openid .

2.5. пружинный загрузчик-стартер-безопасность

При работе с Spring Boot spring-boot-starter-security starter автоматически включает все зависимости, такие как spring-security-core , spring-security-web и spring-security-config среди прочих:


    org.springframework.boot
    spring-boot-starter-security
    2.3.3.RELEASE

Поскольку Spring Boot будет автоматически управлять всеми зависимостями для нас, это также избавит нас от проблемы безопасности spring и старых основных зависимостей, упомянутых ранее.

3. Использование моментальных снимков и контрольных точек

Spring Security milestones , а также моментальные снимки доступны в пользовательских репозиториях Maven, предоставляемых Spring. Дополнительные сведения о том, как их настроить, см. в разделе как использовать моментальные снимки и контрольные точки .

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

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