Перейти к основному содержимому

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

· 4 мин. чтения

1. Обзор

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

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

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

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

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

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

<properties>
<spring-security.version>5.3.4.RELEASE</spring-security.version>
<spring.version>5.2.8.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 4.1.x не интуитивно понятен и не зависит от выпусков Spring 4.1.x! Например, когда была выпущена версия Spring Security 4.1.0 , базовая структура Spring уже имела версию 4.2.x и, следовательно, включала эту версию в качестве зависимости компиляции. План состоит в том, чтобы более точно согласовать эти зависимости в будущих выпусках — см. JIRA для получения более подробной информации — но на данный момент это имеет практические последствия, которые мы рассмотрим далее.

2.2. весна-безопасность-веб

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

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

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

2.3. Spring Security и старая проблема зависимостей Spring Core ``

Эта новая зависимость также демонстрирует проблему для графа зависимостей Maven. Как упоминалось выше, jar-файлы Spring Security зависят не от последних основных jar-файлов Spring (а от предыдущей версии). Это может привести к тому, что эти старые зависимости появятся поверх пути к классам вместо новых артефактов 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 в нашем собственном pom и не полагаться на неявный механизм разрешения зависимостей Maven. Это поместит эту конкретную зависимость на глубину 0 от нашего pom (как она определена в самом 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 и другие

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

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

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

3. Использование Spring Boot

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>

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

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

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

5. Вывод

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