Статьи

Spring Security с Maven

1. Обзор

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

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

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

2.1. весна-безопасности-жильный

Поддержка Core Spring Security — Spring-Security -Core — содержит функции проверки подлинности и контроля доступа, а также поддерживает автономные (не веб-приложения) приложения, безопасность на уровне методов и JDBC:

1
2
3
4
5
6
7
8
9
<properties>
    <org.springframework.security.version>3.1.4.RELEASE</org.springframework.security.version>
    <org.springframework.version>3.2.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.1.4.RELEASESpring и Spring Security находятся в разных расписаниях выпуска , поэтому между номерами версий нет совпадения 1: 1.

Также очень важно понять тот факт, что Spring Security 3.1.x не зависит от выпусков Spring 3.1.x. Это связано с тем, что Spring Security 3.1.x был выпущен до Spring 3.1. План состоит в том, чтобы более точно выровнять эти зависимости в будущих выпусках — см. Этот JIRA для получения более подробной информации — но пока это имеет практические последствия, которые мы рассмотрим далее.

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

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

1
2
3
4
5
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>${org.springframework.security.version}</version>
</dependency>

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

2,3. Spring Security и более старая проблема зависимостей Spring Core

Эта новая зависимость также представляет проблему для графа зависимостей Maven — как уже упоминалось выше, Spring Security может зависеть от зависимостей 3.0.x Spring — что может привести к тому, что эти более старые зависимости окажутся на вершине classpath вместо более новой версии 3.2.x Spring артефакты.

Чтобы понять, почему это происходит, нам нужно посмотреть, как Maven разрешает конфликты — в случае конфликта версий Maven выберет банку, ближайшую к корню дерева. В нашем случае spring-jdbc определяется как spring-orm (с версией 3.2.2.RELEASE ), так и Spring -security-web (с версией 3.0.7.RELEASE ) — так что в обоих случаях spring- jdbc определен на глубине 1 от корня нашего проекта. Поэтому на самом деле будет иметь значение, в каком порядке spring-orm и spring-security-web определены в нашей собственной pom — первая будет иметь приоритет, поэтому мы можем получить любую версию в нашем classpath .

Чтобы решить эту проблему, нам нужно будет явно определить некоторые из зависимостей Spring в нашем собственном pom, а не полагаться на неявный механизм разрешения зависимостей Maven — при этом конкретная зависимость будет помещена на глубину 0 от нашего pom (как это определено в сам пом) так что будет приоритетнее. Все перечисленные ниже подпадают под одну и ту же категорию, и все они должны быть явно определены, либо напрямую, либо для многомодульных проектов, в элементе dependencyManagement родительского элемента:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<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 и другие

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

1
2
3
4
5
6
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>${org.springframework.security.version}</version>
    <scope>runtime</scope>
</dependency>

Никакой код приложения не должен компилироваться с этой зависимостью, поэтому он должен быть определен как среда выполнения .

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

3. Использование снимков и этапов

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

4. Вывод

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

Ссылка: Spring Security с Maven от нашего партнера JCG Евгения Параскива в блоге baeldung .