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.