Реакция получения ответа отсутствует Заголовок авторизации - PullRequest
0 голосов
/ 29 августа 2018

У меня есть некоторые проблемы с 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 мог прочитать заголовок авторизации. Но я не хочу использовать прокси.

...