Евгений Параскив
Перепечатано с общедоступного номера: stackgc
1 Обзор
В этой статье будет описано, как настроить Spring Security с помощью Maven, и представлены конкретные варианты использования зависимостей Spring Security. Последнюю версию Spring Security можно найти по адресуMaven Centralполучено на.
2. Spring Security и Maven
2.1, пружинное ядро безопасности
Поддержка ядра Spring Security (spring-security-core) включает в себя возможности проверки подлинности и контроля доступа, а также поддерживает автономные (не веб-) приложения, политики безопасности на уровне методов и интеграцию JDBC:
<properties>
<org.springframework.security.version>3.2.3.RELEASE</org.springframework.security.version>
<org.springframework.version>4.0.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 Security3.2.x.RELEASEВерсия --Spring и Spring Security имеют разное время выпуска, поэтому между их номерами версий нет соответствия.
Если вы используете более старую версию Spring, очень важно: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полагаться:
<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- Как упоминалось выше, jar-файлы Spring Security не зависят от последних jar-файлов ядра Spring (но этого не было в предыдущих версиях). Это может привести кстарые зависимостииспользуется вместо более новых артефактов 4.x Spring.
Чтобы понять, почему это происходит, нужно посмотреть, как Maven разрешает конфликты — в случае конфликтов версий Maven выберет банку, ближайшую к корневому узлу дерева. В нашем случае spring-core определяется spring-orm (версия 4.x.RELEASE), который также определяется spring-security-core (старая версия 3.2.8.RELEASE) — так что в обоих случаях spring-jdbc имеет глубину 1, определенную в корне pom нашего проекта. Итак, в каком порядке определены spring-orm и spring-security-core в нашем собственном pom — первый имеет приоритет, поэтому мы можем использовать любую версию в пути к классам.
Чтобы исправить это, мы должны в pomЯвно определить некоторые зависимости Spring, вместо того, чтобы полагаться на неявный механизм разрешения зависимостей Maven — это даст нашему pom конкретную глубину зависимости 0 (как она определена в самом pom), поэтому она будет рассмотрена первой. Все нижеперечисленное относится к одной и той же категории и должно быть четко определено, а для многомодульных проектов должно быть в родительскомdependencyManagementОпределяется в элементе:
<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:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${org.springframework.security.version}</version>
<scope>runtime</scope>
</dependency>
Никакому коду приложения не нужно использовать эту зависимость для компиляции, поэтому она должна быть установлена наruntimeобъем.
LDAP, ACL, CAS и OpenID также имеют зависимости Spring Security: spring-security-ldap, spring-security-acl, spring-security-cas и spring-security-openid.
3. Используйте моментальные снимки и вехи
Spring предоставляет Spring Security в пользовательском репозитории Maven.milestones(основной выпуск) иsnapshots(версия моментального снимка), для получения дополнительной информации о настройке см.Как использовать вехи и снимки.
4. Вывод
В этой статье обсуждаются подробности использования Spring Security с Maven. Упомянутые здесь зависимости Maven — это лишь некоторые важные общие зависимости. Но он также обеспечивает хорошую отправную точку для использования Spring в ваших проектах Maven.