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.RELEASE — Spring и 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.