Попередні умови

Для Spring Security потрібне середовище виконання Java 8 або вище.

Оскільки Spring Security прагне працювати автономно, тобі не потрібно розміщувати будь-які спеціальні конфігураційні файли в середовищі виконання Java. Зокрема, тобі не потрібно налаштовувати спеціальний файл політики Java Authentication and Authorization Service (JAAS) або розміщувати Spring Security у загальних місцях classpath.

Аналогічно, якщо ти використовуєш EJB Container або Servlet Container, тобі не потрібно розміщувати де-небудь спеціальні конфігураційні файли або включати Spring Security до завантажувача класів сервера. Усі необхідні файли містяться всередині вашої програми.

Така конструкція забезпечує максимальну гнучкість при розгортанні, оскільки ти можеш скопіювати цільовий артефакт (будь то JAR, WAR або EAR) з однієї системи на іншу, і він одразу ж запрацює.

У цьому розділі описано все, що потрібно знати про отримання двійкових файлів Spring Security. Щоб отримати вихідний код, див. розділ "Початковий код".

Нумерація випусків

Версії Spring Security класифікуються на MAJOR.MINOR.PATCH таким чином:

  • MAJOR-версії можуть містити критичні зміни. Зазвичай це робиться для забезпечення підвищеної безпеки відповідно до сучасних методів захисту.

  • MINOR-версії містять покращення, але вважаються пасивними оновленнями

  • Рівень PATCH має бути ідеально сумісним як з наступними, так і з попередніми версіями, за винятком змін, що виправляють помилки.

Використання з Maven

Як більшість проєктів з відкритим вихідним кодом, Spring Security розгортає свої залежності у вигляді артефактів Maven. У статтях цього розділу докладно описано, як використовувати Spring Security разом із Maven.

Spring Boot з використанням Maven

Spring Boot містить стартер spring-boot-starter-security, який поєднує пов'язані зі Spring Security залежності в одне ціле. Найпростіший і кращий спосіб використання стартера — Spring Initializr через інтеграцію з IDE (Eclipse, IntelliJ, NetBeans) або через start.spring.io.

До того ж, можна вручну додати стартер, як показано в наступному прикладі:

pom.xml
<dependencies>
  <!-- ... other dependency elements ... -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
  </dependency>
</dependencies>

Оскільки Spring Boot передбачає використання BOM-специфікації Maven для керування версіями залежностей, вказувати версію не потрібно. Якщо потрібно перевизначити версію Spring Security, можна зробити це, зазначивши властивість Maven, як показано в наступному прикладі:

pom.xml
<properties>
  <!-- ... -->
  <spring-security.version>5.7.4</spring-security.version>
</properties>

Оскільки в Spring Security зміни вносяться лише в основних випусках, використовувати новішу версію Spring Security зі Spring Boot можна без побоювання. Однак іноді може знадобитися оновити версію Spring Framework. Зробити це можна, додавши властивості Maven, як показано в наступному прикладі:

pom.xml
<properties>
  <!-- ... -->
  <spring.version>5.3.23</spring.version>
</properties>

Якщо ти використовуєш додаткові функції (такі як LDAP, OpenID та інші), тобі також потрібно буде додати відповідні модулі та залежності проєкту.

Maven без використання Spring Boot

У разі роботи зі Spring Security без Spring Boot найкращим рішенням буде використовувати BOM-специфікацію для Spring Security, яка дозволить забезпечити послідовне використання версії Spring Security у всьому проєкті. У цьому прикладі показано, як це зробити:

pom.xml
<dependencyManagement>
  <dependencies>
    <!-- ... other dependency elements ... -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-bom</artifactId>
      <version>{spring-security-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Мінімальний набір залежностей Spring Security для Maven зазвичай виглядає так:

pom.xml
<dependencies>
  <!-- ... other dependency elements ... -->
  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
  </dependency>
</dependencies>

Складання фреймворку Spring Security виконується на базі Spring Framework 5.3.23, але в цілому він повинен працювати з будь-якою новішою версією Spring Framework 5.x. Багато користувачів, ймовірно, зіткнуться з тим, що транзитивні залежності Spring Security дозволяють Spring Framework 5.3.23, що може викликати дивні проблеми з classpath. Найпростіший спосіб розв'язати цю проблему — використовувати spring-framework-bom у розділі <dependencyManagement> твого pom.xml, як показано в наступному прикладі:

pom.xml
<dependencyManagement>
  <dependencies>
    <!-- ... other dependency elements ... -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-framework-bom</artifactId>
      <version>5.3.23</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

У попередньому прикладі всі транзитивні залежності Spring Security гарантовано використовують модулі Spring 5.3.23.

Цей підхід заснований на концепції "специфікації матеріалів" (BOM) з Maven і доступний тільки в Maven 2.0.9+.

Репозиторії Maven

Всі загальнодоступні випуски (тобто версії, що закінчуються на .RELEASE) розгортаються в Maven Central, тому в pom-файлі не потрібно оголошувати додаткові репозиторії Maven.

У разі використання SNAPSHOT-версії необхідно переконатися, що було визначено репозиторій для снепшот-версій Spring, як показано в наступному прикладі:

pom.xml
<repositories>
  <!-- ... інші можливі елементи репозиторію ... -->
  <repository>
    <id>spring-snapshot</id>
    <name>Spring Snapshot Repository</name>
    <url>https://repo.spring.io/snapshot</url>
  </repository>
</repositories>

Якщо ти використовуєш стабільну версію або передвипускну версію, тобі необхідно переконатися, що було визначено репозиторій для стабільних версій Spring, як показано в наступному прикладі:

pom.xml
<repositories>
  <!-- ... інші можливі елементи репозиторію ... -->
  <repository>
    <id>spring-milestone</id>
    <name>Spring Milestone Repository</name>
    <url>https://repo.spring.io/milestone</url>
  </repository>
</repositories>