У вас есть две цепочки фильтров.Ни у одного из них нет правильно настроенного шаблона точки входа http.antMatcher
.Это означает, что они настроены на использование /**
в качестве шаблона точки входа.
Например,
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().fullyAuthenticated()
- это то же самое, что сказать:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/**")
.authorizeRequests()
.anyRequest().fullyAuthenticated()
Чтоздесь мы говорим:
http
- цепочка фильтров безопасности http.antMatcher
- точка входа в цепочку фильтров безопасности http.authorizeRequests
-начало моих ограничений доступа к конечной точке http.authorizeRequests.antMatchers
- список URL-адресов с определенным доступом
Итак, вам нужно изменить цепочку фильтров @Order(1)
, чтобы сузить шаблон,Например: http.antMatcher("/api/transaction/**")
Ваша конфигурация теперь будет выглядеть как
@Configuration
@Order(1)
public static class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/transaction/**") //customized entry point
.authorizeRequests()
.antMatchers("/api/transaction/testf").authenticated().and()
.x509()
.subjectPrincipalRegex("CN=(.*?)(?:,|$)")
.userDetailsService(new X509UserDetailsService())
;
}
}
@Configuration
@Order(2)
public static class ApiTokenSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/**") //this is default
.authorizeRequests()
.antMatchers("/oauth/token", "/api/dealer/login").permitAll()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
;
}
При существующей конфигурации цепочка фильтров с именем ApiWebSecurityConfig
будет перехватывать все вызовы.Другая цепочка фильтров, ApiTokenSecurityConfig
, никогда не используется.
Вы можете увидеть другое описание в этом ответе
SpringSecurity: сделать RESTful API basic-authаутентификация возможна только через одну конечную точку