Как добавить токен csrf в почтовый запрос axios в ответной и весенней загрузке? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь добавить Логин с аутентификацией JDBC безопасности Spring в весенней загрузке и React.Я добавил конфигурацию фильтра cors в конфигурационный файл Spring для работы с CORS.Я могу Войти с помощью, когда .csrf().disable() отключен.но когда я пытаюсь отправить тот же почтовый запрос с токеном csrf, я получаю сообщение об ошибке " Поле заголовка запроса x-xsrf-token не разрешено Access-Control-Allow-Headers в предпечатном ответе ".Я пробовал решения, представленные в других вопросах, но у меня это не сработало.

заголовок ответа

HTTP/1.1 500
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Credentials: true
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Content-Language: en-US
Transfer-Encoding: chunked
Date: Sun, 20 Jan 2019 06:23:40 GMT
Connection: close

заголовок запроса

POST /login HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 81
Access-Control-Allow-Origin: http://localhost:3000
Accept: application/json, text/plain, */*
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:3000/login
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=5B64C3749B3DCBBB5072B827D59E8418 

данные формы

username: vk%40gmail.com
password: admin
_csrf: 30955a56-abb5-443a-a029-d6b371f16e5a

Я отправляю токен csrf для реакции приложения следующим образом

CsrfToken token = (CsrfToken)request.getAttribute(CsrfToken.class.getName());
map.put("csrf", token.getToken());

это конфигурация фильтра Cors

@Bean  
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
    configuration.setAllowCredentials(true);
    configuration.setAllowedHeaders(Arrays.asList("authorization", "Cache-Control", "content-type", "xsrf-token"));
    configuration.setExposedHeaders(Arrays.asList("xsrf-token"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Этот запрос POST

  export const addProjectTask = (username,password,csrf,history) => async dispatch => {

   axios.post('http://localhost:8080/login', 
   Qs.stringify({
    username: username,
    password: password,
    }), {
    headers: { 
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      "X-XSRF-TOKEN": csrf,
     // Authorization: 'Bearer ' + csrf,
      "Content-Type": "application/x-www-form-urlencoded"
    }, 
    credentials: 'include',
    })
  .then(function (response) {
    console.log(response);
    history.push("/");  
  }) 
  .catch(function (error) {
    console.log(error);
  });
  };

что я тут не так делаю?

...