Вы можете сделать это с помощью antMatchers()
, хотя:
http
.antMatcher("/api/**")
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/user").permitAll()
.anyRequest().hasRole("USER")
Разница между antMatcher(..)
и antMatchers(..)
заключается в том, что вы используете antMatcher(..)
, когда у вас есть отдельные классы конфигурации безопасности. Это может быть необходимо, когда вам нужно различать:
- Механизмы аутентификации (форма входа, базовая аутентификация, ...)
- Обработка CSRF
- Управление сессиями
- Фильтры
- Услуги пользователя
- ...
С другой стороны, antMatchers(..)
(в пределах authorizeRequests(..)
) используется для различения уровней авторизации (какие роли имеют доступ к определенной конечной точке).
В вашем случае конфигурация подпадает под последнюю, так как вам нужно только различать полномочия конечной точки POST /api/user
.
Однако, если вам действительно необходим более детальный контроль над тем, какой класс конфигурации безопасности следует применять, тогда вам следует использовать RequestMatcher
, как указано в комментариях.
Этот интерфейс имеет один аргумент HttpServletRequest
и ожидает, что вы вернете boolean
. Поскольку HttpServletRequest
содержит всю необходимую информацию, такую как путь и метод HTTP, вы можете правильно настроить, какой класс конфигурации следует применять. Однако в этом случае это не нужно.