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

Для 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>