Spring Security

Spring Security — фреймворк на языке Java, предназначенный для обеспечения аутентификации, авторизации и реализации других функций безопасности в корпоративных приложениях. Проект был начат в конце 2003 года под названием Acegi Security (произносится как «Аси́джи», каждая буква — первая, третья, пятая, седьмая и девятая в английском алфавите, чтобы избежать конфликтов с именами[1]), автором выступил Бен Алекс. Первый публичный выпуск под Apache License состоялся в марте 2004 года. Позднее Acegi Security был включён в портфель Spring как официальный подпроект под новым названием Spring Security. Первый релиз под этим именем — Spring Security 2.0.0 — был выпущен в апреле 2008 года; коммерческая поддержка и обучение предоставляются компанией SpringSource.

Что важно знать
Spring Security
Тип безопасность веб-приложений
Разработчик Spring
Написана на Java
Операционная система кроссплатформенная
Последняя версия 7.0.4 (16 марта 2026)
Лицензия Apache License 2.0
Сайт projects.spring.io/sprin…

Сценарий аутентификации

На схеме 1 представлен базовый порядок прохождения запроса аутентификации в системе Spring Security. Отправка браузером запроса проходит через различные фильтры до завершения процесса — успешной аутентификации либо возникновения ошибки HTTP 403.

Браузер отправляет «учётные данные для аутентификации»
«Механизм аутентификации» собирает детали
Создаётся объект «запрос аутентификации»
Запрос аутентификации направляется в AuthenticationManager
AuthenticationManager (отвечает за обработку цепочки AuthenticationProviders)
«AuthenticationProvider» запрашивает у UserDetailsService объект UserDetails
Полученный объект UserDetails (содержит также GrantedAuthority[]) используется для создания полного объекта Authentication
Если «механизм аутентификации» получает обратно заполненный объект Authentication, считается, что запрос валиден, Authentication помещается в SecurityContextHolder, после чего исходный запрос повторяется.
Если же AuthenticationProvider отклонил запрос, механизм аутентификации предложит повторить ввод пользователю.
AbstractSecurityInterceptor авторизует повторный запрос и генерирует исключения Java (обращается к AccessDecisionManager за решением).
ExceptionTranslationFilter преобразует исключения от AbstractSecurityInterceptor в соответствующие HTTP-коды ошибок.
Код ошибки 403 — если пользователь аутентифицирован, но ему не хватает прав.
Запуск AuthenticationEntryPoint — если пользователь не прошёл аутентификацию, вызывается механизм аутентификации.

Основные возможности аутентификации

  • Поддержка LDAP (как с «bind»-тактикой, так и с сравнением паролей) для централизованного хранения учётных данных[2].
  • Единый вход через Central Authentication Service.
  • Использование JAAS (Java Authentication and Authorization Service) через стандартный LoginModule (делегирование функционирования в JAAS-модуль)[3].
  • Базовая HTTP-аутентификация согласно RFC 1945.
  • Дигест-аутентификация по RFC 2617 и RFC 2069[2].
  • Поддержка X.509 с предъявлением клиентских сертификатов через SSL.
  • Интеграция с SiteMinder (CA, Inc) для аутентификации.
  • Поддержка механизма, аналогичного su (Unix), для смены идентификации в рамках HTTP/HTTPS-соединения.
  • Run-as-замещение, позволяющее выполнять операции от имени другого пользователя.
  • Анонимная аутентификация — даже неаутентифицированные пользователи получают уникальную идентичность.
  • Адаптеры для контейнеров (собственный realm) для Apache Tomcat, Resin, JBoss, Jetty.
  • Экспериментальная поддержка NTLM (Windows) для интеграции с браузерами.
  • Веб-формы аутентификации (по аналогии со стандартом Servlet Container).
  • Механизм «запомнить меня» (Remember-me) через cookies.
  • Контроль одновременных сессий (ограничение числа одновременных входов одного пользователя).
  • Возможность полной настройки и реализации собственных механизмов аутентификации.

Основные возможности авторизации

  • Авторизация вызова методов через AspectJ.
  • Ограничение HTTP-доступа к URL с помощью масок Apache Ant или регулярных выражений.

Возможности разграничения доступа к объектам

Другие характеристики

Примечания

Литература

  • Deinum, Marten. Spring Recipes: A Problem-Solution Approach : [англ.] / Marten Deinum, Daniel Rubio, Josh Long … [et al.]. — Второе. — Apress, 1 сентября 2014. — P. 1104. — ISBN 978-1-4302-2499-0.
  • Why the name Acegi? (англ.). spring.io. Дата обращения: 24 июня 2025.

Ссылки