Spring Security обладает интересным свойством: подключить его к проекту очень просто, а вот понять, что именно произошло после добавления зависимости, уже не так просто.
Вот вы добавили spring-boot-starter-security, и приложение внезапно начало возвращать форму входа. Откуда взялся пользователь? Кто создал цепочку фильтров? Почему один запрос завершается со статусом 401, а другой со статусом 403? Почему после добавления еще одного SecurityFilterChain часть прежних правил будто бы перестала работать?
Можно, конечно, каждый раз находить похожий пример и копировать конфигурацию. Иногда это даже будет работать. Проблема начинается тогда, когда поведение фреймворка нужно изменить или когда найденный пример относится к другой версии Spring Security.
Главная проблема большинства материалов по Spring Security в том, что они показывают какую-то небольшую часть общей картины, при этом у человека после чтения не остается цельная модель происходящего.
С этой точки зрения предлагаю посмотреть на четвертое издание книги Бадра Насслахсена «Spring Security». Русское издание вышло в 2026 году. Это будет небольшая рецензия/обзор книги с моей стороны.
Сразу обозначу свою позицию. Я не считаю эту книгу универсальным руководством по безопасности приложений и не думаю, что ее примеры можно бездумно переносить в production. Но как способ систематизировать знания именно по Spring Security она вполне заслуживает внимания. Ниже постараюсь объяснить почему.
Немного про автора
Книгу написал мой знакомый, Бадр Насслахсен, человек, с кем я периодически пересекался как на конференциях, так и в Open Source. Я почти уверен, что в РФ многие этого человека не знают, но он является автором проекта springdoc-openapi, с помощью которого многие команды генерируют OpenAPI-документацию и подключают Swagger UI к своим приложениям.
Сделаем небольшую историческую сводку для понимания ситуации. Опытные Java разработчики наверняка помнят, что ранее был такой проект, назывался Springfox (в частности Springfox Swagger), который впоследствии “умер”, как обычно это происходит с проектами в Open Source.
Такая медленная смерть проектов в OSS происходит довольно регулярно:
-
Querydsl
-
Powermock
-
и вот Springfox
И кстати, был бы у вас Axelix, вы бы знали об этом и смогли бы контролировать это в рамках всей вашей Java экосистемы. Но да ладно.
Соответственно, Бадр просто в какой-то момент написал альтернативу Springfox, и назвал ее Springdoc. По большому счету это мостик для интеграции Spring приложений с OpenAPI стандартом, кодогенерацией вокруг него и т.д.
Кстати, хочу подчеркнуть, что этот проект никак со Spring-ом и с Tanzu не связан, это отдельная сущность.
Тем не менее, давайте побудем педантами немного и скажем, что авторство известной библиотеки само по себе же не гарантирует качество книги. Поэтому не будем делать скидку на имя и посмотрим, что находится внутри.
Что вообще внутри
Перечислять все 19 глав особого смысла нет. Удобнее разделить содержимое на несколько смысловых блоков.
Первый блок посвящен основам. Автор начинает с аудита условного небезопасного приложения, затем переходит к начальной конфигурации Spring Security и архитектуре аутентификации. Здесь появляются базовые понятия: SecurityContextHolder, SecurityContext, Authentication, AuthenticationManager, ProviderManager и AuthenticationProvider.
От себя скажу, что инструментарий выше это основа, база на которой строится вообще всё: Spring OAuth2, недавний MFA который появился в Spring Security 7 и т.д.
Второй блок посвящен конкретным способам аутентификации: JDBC, Spring Data, LDAP, remember-me и клиентские сертификаты в TLS. Далее идут OAuth 2, OpenID Connect и SAML 2. Это такие практические технологии, которые используются в современных Enterprise-ах массово, например большая часть крупных enterprise-ов имеют свой SSO, построенный чаще всего поверх как раз OIDC.
На практике, большинство разработчиков с такими технологиями будет сталкиваться редко, но понимать что это и как оно работает довольно важно.
В заключительной части рассматриваются сессии, CSRF, XSS, clickjacking, тестирование, реактивные приложения, миграция на Spring Security 6, JWT в микросервисах, CAS и особенности эксплуатации в рамках GraalVM.
Как видите, охват довольно широкий. Причем рядом с OAuth 2 и JWT соседствуют LDAP, SAML и CAS. Кому-то такое соседство может показаться странным: ну какой LDAP, кому вообще сейчас нужны эти старые технологии? На практике они особо никуда не делись из корпоративного сектора. То, что на новых проектах все чаще используют OIDC (что абсолютная правда), не означает, что существующие интеграции с LDAP или SAML внезапно испарились. Их до сих пор очень много, особенно в Европе.
Важная особенность книги даже не в широте охвата, а в сквозном примере. Мы кстати в Spring АйО Академии делаем точно так же, потому что это позволяет не менять контекст в голове там, где оно того не стоит, и позволяет сформировать более полную картину происходящего человеку.
Так вот, на протяжении большей части материала развивается приложение JBCP Calendar. Это не набор не связанных друг с другом «Hello World». Приложение постепенно обрастает доменной моделью, пользователями, правилами доступа, сессиями и интеграциями. У примеров есть контрольные точки, а исходный код выложен в GitHub-репозитории.
Для учебной книги это правильный подход. Изменения становится проще связывать между собой.
Не рецепты, а модель
На мой взгляд, наиболее полезная часть книги начинается там, где автор показывает внутренние компоненты Spring Security.
Например, в главе 3 разбирается не только то, как получить имя текущего пользователя. Объясняется, какую роль играет Authentication до и после аутентификации, как ProviderManager делегирует работу нескольким AuthenticationProvider и почему учетные данные обычно удаляются из объекта Authentication после успешного входа.
Это не просто инструкция «добавьте такой-то бин». У читателя появляется возможность рассуждать о поведении фреймворка. Потому что код и детали реализации точно будут меняться, но важно, чтобы потом читатель мог сказать при дизайне компонента в своей системе:
Погоди, но оно же не может так работать, ведь…
Другой пример такого подхода встречается в главе 13, посвященной авторизации. Простое правило вроде hasRole("ADMIN") отвечает только на вопрос, есть ли у пользователя нужная роль. Но что, если пользователь должен редактировать только те события календаря, которыми владеет сам? Здесь одной роли уже недостаточно: решение зависит от атрибутов пользователя и конкретного ресурса. Такой подход называют attribute-based access control, или ABAC. Реализовывать ABAC кстати гораздо сложнее, чем традиционный RBAC.
Ценность этого разбора не в том, что читатель запомнит очередной API. Он начинает понимать более общую модель: решение о доступе может учитывать пользователя, защищаемый объект и контекст операции. А значит, под нестандартные бизнес-правила не нужно изобретать отдельный механизм безопасности, их можно встроить в уже существующий через предусмотренные точки расширения. Конкретная реализация может измениться, но сам принцип останется тем же.
Актуальность. Spring Security 6 в мире Spring Security 7
Теперь к вопросу, который нельзя обходить в рецензии на техническую книгу.
Оригинальное издание вышло в 2024 году, русский перевод появился в 2026-м. Книга описывает Spring Security 6 и Spring Boot 3, тогда как актуальная линейка фреймворка уже Spring Security 7. Означает ли это, что книга устарела?
Мой ответ: нет, но читать ее нужно с пониманием того, какой именно слой знаний она дает.
Вообще, в эру AI мир меняется довольно быстро. Тем не менее, определённый базис будет оставаться с нами ещё долгие годы и десятилетия.
Например, разница между аутентификацией и авторизацией никуда не делась. Не потеряли смысл Authentication, SecurityContext, цепочка фильтров, сессии, CSRF, OAuth 2, OIDC и принципы проверки JWS. Не перестала быть актуальной и мысль о необходимости защищать не только HTTP endpoint, но и бизнес-операцию.
Другое дело конкретные конфигурации. Сигнатуры API, deprecated-компоненты, настройки по умолчанию и рекомендации по миграции меняются. Например, в главе про GraalVM используются конкретные версии Spring Boot 3.2.4 и Native Build Tools 0.10.1. GraalVM как проект сейчас переживает ряд крупных изменений (например в сторону фокуса в других экосистемах помимо Java), поэтому тут современные реалии уже нужно держать в уме.
То же самое относится к главе о миграции со Spring Security 5 на 6. Если у Вас именно такая задача, глава окажется полезной. Если же Вы переходите на Spring Boot 4 и Spring Security 7, она даст исторический и архитектурный контекст, но не заменит актуальный migration guide.
Поэтому я бы сформулировал так: книга не устарела концептуально, но часть ее примеров уже находится в конкретном версионном контексте. Это не одно и то же.
Где книгу нужно читать критически
Без этого раздела рецензия была бы не очень честной. В книге есть места, которые не стоит принимать как окончательную истину.
Например в рамках OAuth 2. В главе 17 authorization code, implicit, resource owner password credentials и client credentials описываются как четыре основных типа grant-ов. Для понимания существующих систем это полезно. Но для проектирования новой системы здесь необходим современный security context.
В RFC 9700, опубликованном в 2025 году как Best Current Practice по безопасности OAuth 2.0, implicit grant рекомендовано не использовать, а resource owner password credentials grant обозначен прямым MUST NOT be used. Причины вполне практические: утечка и replay токенов в одном случае, раскрытие пароля пользователя клиенту и расширение поверхности атаки в другом.
Есть и более общее ограничение. Spring Security отвечает за определенную часть защиты приложения, но не заменяет модель угроз, безопасный дизайн, контроль зависимостей, защиту CI/CD, корректное логирование и эксплуатационную безопасность. Книга сама ссылается на OWASP, и это правильно. Но если Вам нужен системный материал по application security в целом, одной этой книги будет недостаточно.
Наконец, широкий охват имеет обратную сторону. За 528 страниц невозможно одинаково глубоко раскрыть LDAP, SAML, OAuth 2, ACL, сессии, реактивный стек, JWT, CAS и GraalVM. Поэтому книгу лучше воспринимать как способ систематизации своих знаний по Spring Security, а не как исчерпывающий справочник по каждой из этих тем.
Кому книга подойдет
Я бы не рекомендовал начинать с нее человеку, который совсем не знаком со Spring. Автор предполагает наличие базовых знаний Java, Spring и веб-разработки. Иначе читателю придется параллельно разбираться слишком с большим количеством слоев.
Начинающему разработчику, который уже собрал простое приложение на Spring Boot, книга может помочь пройти путь от формы входа до более сложных механизмов. Чаще всего, когда человек совершенно не знаком со Spring Security, у него как раз в голове формируется каша, и совсем отсутствует структура того, а как весь этот пазл складывается воедино. Вам следует прямо прочитать от начала до конца.
От себя скажу — примеры действительно лучше запускать, а не читать как художественную литературу, не поленитесь. Когда человек делает что-либо руками, то материал лучше усваивается, это доказано.
Условному “Middle”-разработчику я бы рекомендовал особенно главы 3, 11, 13, 14 и 15. Они помогают собрать воедино аутентификацию, авторизацию, сессии и защиту от распространенных атак. Дальше уже можно выбирать главы по своему проекту: OAuth 2, SAML, LDAP, JWT или CAS.
Опытному специалисту читать все подряд, вероятно, не потребуется. Выборочно могут быть интересны пользовательская авторизация, ACL, миграция и особенности native image. Но если у Вас уже есть сильная модель Spring Security и опыт с описанными протоколами, книга скорее поможет закрыть отдельные пробелы, чем откроет принципиально новую картину.
Заключительное слово
Я бы рекомендовал четвертое издание «Spring Security» не как сборник готовых production-конфигураций и не как последнюю книгу по безопасности, которую нужно прочитать Java-разработчику.
Его разумнее рассматривать как структурированное введение в экосистему Spring Security и способ понять, из каких компонентов состоит фреймворк. Сквозное приложение, разбор внутренних API, многоуровневая авторизация и широкий набор интеграций являются здесь основными преимуществами.
В общем, именно в рамках Spring Security, я думаю, что книга даст вам хороший фундамент.
Всем успехов!
Источник: habr.com