У меня есть некоторые проблемы с CORS при использовании React fetch и Spring Boot.
Приложение React работает на локальном хосте: 3000.
Бэкэнд Spring Boot работает на localhost: 3001.
Моя проблема возникает, когда я пытаюсь войти в систему, используя fetch с http://localhost:3001/login url, ответ в javascript не содержит токен авторизации.
Аутентификация на стороне сервера работает.
Когда я открываю Chrome Inspector, я вижу Авторизацию на вкладке «Сеть» по запросу на вход, только она отсутствует в ответе javascript.
Запрос на выборку React выглядит следующим образом: в коде const userToken = response.headers.get ('Authorization'); возвращает «нулевую» строку вместо токена.
return fetch("http://localhost:3001/login",{
method: 'post',
headers: {
"Accept": "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
email,
password
})
})
.then(
response => {
if(response.ok) {
const userToken = response.headers.get('Authorization');
return true;
}
// Error handling
}
);
Конфигурация Spring Boot Security выглядит следующим образом:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf()
.disable().authorizeRequests()
.antMatchers(HttpMethod.POST, REGISTRATION_URL).permitAll()
.anyRequest().authenticated()
.and()
.addFilter(// Auth Filter)
.addFilter(// Another auth Filter)
// this disables session creation on Spring Security
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
Другое дело. Когда я использовал прокси: "http://127.0.0.1:3001" в package.json, логин работал, и приведенный выше код React мог прочитать заголовок авторизации. Но я не хочу использовать прокси.