Два SecurityFilterChain в Spring

Иногда бывает необходимость настроить разные SecurityFilterChain для разных разделов сайта или для разных REST-сервисов. Это, на самом деле, довольно просто.

Как работают несколько SecurityFilterChain в одном приложении описано в документации по Spring Security.

В случае с XML-конфигурацией нам нужно сделать два блока <security:http:

Обратите внимание на атрибут pattern у http. Именно по нему определяется, какой из SecurityFilterChain-ов отработает.

В примере выше для адресов /site/home, /site/about и прочих, начинающихся на /site/, никакой аутентификации не будет. Они будут доступны всем. А для адресов /rest/v1/UserService, /rest/v1/SomeService, /rest/StrangeService и прочих, начинающихся с /rest/ нужна будет иметь роль ROLE_USER, кроме адресов, начинающихся с /rest/v1/PublicService, и адреса /rest/v1/UserService/login.

Как же перевести это в Java-конфигурацию, которая обычно и используется со Spring Boot? Нам просто нужно объявить два бина SecurityFilterChain:

Выглядит это всё, конечно, немного иначе. Я довольно долго переделывал XML-конфигурацию в Java-конфигурацию для своей будущей книги, но на самом деле идея там та же самая. Мы просто определяем два SecurityFilterChain, а разделяются они по шаблону в securityMatcher (аналог pattern для XML-конфигурации).

Довольно короткая статья получилась, но я не знаю, что ещё тут можно расписать, кроме этих примеров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *