[Перевод] Изучение Spring Security, часть 1: Maven

Java Spring Java EE Безопасность maven

Евгений Параскив

Перепечатано с общедоступного номера: 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.

Ссылки по теме в тексте