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.