Мне интересно, есть ли способ обеспечить два отдельных типа аутентификации? Пользователь должен войти, зарегистрироваться, получить пользовательские данные для конечных точек /login
, /register
, /user
, используя basi c auth. И когда я звоню /api
, он должен быть аутентифицирован только с помощью токена JWT , указанного в заголовках.
Но когда я звоню /api
, я получаю все данные без какой-либо аутентификации. Когда пользователь входит в систему и вызывает /user
, API дает JWT доступ к /api
.
Мой код:
Конфигурация для basi c auth:
@Configuration
@EnableWebSecurity
@Order(1)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf().disable();
http
.authorizeRequests()
.antMatchers("/user").authenticated()
.antMatchers("/register").permitAll()
.and()
.formLogin().permitAll()
.defaultSuccessUrl("/user");
}
Конфигурация для аутентификации JWT:
@Configuration
@Order(2)
public class JWTSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.antMatcher("/api/**")
.addFilterAfter(new JWTAuthorizationFilter(),UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic().disable();
}