Предварительные условия

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