Я получил вопрос.Это был контекстный путь, который вызывал проблему.У меня есть сервлет диспетчера, определенный с URL-адресом сопоставления /api/v1/*
, и, как видно из моего запроса signup
, он содержит путь контекста, например http://localhost:8085/api/v1/signup
Для конфигурации OAuth2 в Spring нам нужно принятьдополнительная забота о пути контекста.Во-первых, он должен быть определен в AuthorizationServer
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(final AuthorizationServerEndpointsConfigurer endpoints) {
endpoints
.prefix("/api/v1") //here
.tokenStore(tokenStore())
.accessTokenConverter(accessTokenConverter())
.authenticationManager(authenticationManager)
.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST);
}
Затем контекст должен быть добавлен к пути permitAll()
следующим образом
@Override
public void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/v1/signup").permitAll() //context path here
.anyRequest().authenticated();
}
До настоящего времени запрос регистрациивсе еще ожидал передать токен доступа с этим.Чтобы удалить защиту OAuth из регистрации, нам нужно удалить защиту на WebSecurity
, что можно сделать с помощью WebSecurityConfigurerAdapter
@EnableWebSecurity
@EnableGlobalMethodSecurity
@ComponentScan(basePackages = { "com.sample.rest.security" })
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity webSecurity) throws Exception {
webSecurity.ignoring().antMatchers("/signup");
}
//////////// OR use below method ///////////
/* @Override
protected void configure(HttpSecurity http) throws Exception {
http.
authorizeRequests().antMatchers("/signup/**").permitAll();
}
*/
}
Обратите внимание, что нет никакого смысла добавлять контекстный путь к WebSecurityConfigurerAdapter
конфигурация.