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 или регулярных выражений.
Возможности разграничения доступа к объектам
- Реализация списков контроля доступа для бизнес-объектов.
- Spring Security включает хранилище ACL на основе баз данных[2].
- Средства для контроля авторизации до и после выполнения методов.
Другие характеристики
- Локализация: поддержка сообщений интерфейса на разных языках.
- Защита канала — автоматическое переключение между HTTP и HTTPS по заданным правилам.
- Кэширование всех участков, связанных с работой с базой данных.
- Возможность публикации событий для поддержки событийно-ориентированных сценариев.
- Интеграционное тестирование через JUnit.
- Сам фреймворк Spring Security тщательно покрыт тестами JUnit.
- Примеры приложений, детальная документация Javadoc и справочник.
- Независимость от конкретного веб-фреймворка.
Примечания
Литература
- 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.


