Шаблон Rest продолжает получать HttpClientErrorException $ Forbidden: 403 null - PullRequest
0 голосов
/ 17 июня 2019

Я получаю HttpClientErrorException $ Forbidden: 403 null при выполнении вызова покоя с помощью шаблона отдыха.

 private HttpHeaders getAuthHeaderWithToken() {
ResponseEntity response = restTemplate.exchange("http://localhost:8080/user", HttpMethod
        .OPTIONS, new HttpEntity<>(getAuthHeader()), String.class);

    String token = response.getHeaders().getFirst("Set-Cookie").split("=")
        [1].split(";")[0];
    String sessionId = response.getHeaders().get("Set-Cookie").get(1).split("=")
        [1].split(",")[0];

    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.add("Accept", MediaType.APPLICATION_JSON_VALUE);
    httpHeaders.add("Authorization", authHeader);
    httpHeaders.add("Content-Type", "application/json");
    httpHeaders.add("Accept", "*/*");
    httpHeaders.add("Cookie", "JSESSIONID=" + sessionId);
    httpHeaders.add("X-XSRF-TOKEN", token);
return httpHeaders;
}

public void update () {
HttpEntity httpEntity = new HttpEntity(createPutRequestObject(ticketNo,
          status, resourceName), getAuthHeaderWithToken());

ResponseEntity response = restTemplate.exchange(URL + "/"
          + id, HttpMethod.PUT, httpEntity, String.class);
}

LOGS

 headers     ---- getAuthHeader  -- [Accept:"application/json", Authorization:"Basic cnVwOjJLOHlzSWtyUUo=", Content-Type:"application/json"]
 ---------------- 
 ---------------- 
response -- [Set-Cookie:"XSRF-TOKEN=2ea53952-1846-41ba-b82a-99b991a3047c;path=/", "JSESSIONID=54F4C9452821DEBA795E9E7B10A2565A;path=/;HttpOnly", X-Application-Context:"application:8080", Allow:"GET,HEAD", 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-Length:"0", Date:"Mon, 17 Jun 2019 12:50:24 GMT"]
 ---------------- 
 ---------------- 
httpHeaders -- [Accept:"application/json", "*/*", Authorization:"Basic cnVwOjJLOHlzSWtyUUo=", Content-Type:"application/json", Cookie:"JSESSIONID=54F4C9452821DEBA795E9E7B10A2565A", X-XSRF-TOKEN:"2ea53952-1846-41ba-b82a-99b991a3047c"]
 ---------------- 

И ERROR

 Failed to update user
response received : org.springframework.web.client.HttpClientErrorException$Forbidden: 403 null

И на другом конце, где выполняется запрос

2019-06-17 13:55:09.531 DEBUG 17719 --- [nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Written [{timestamp=Mon Jun 17 13:55:09 BST 2019, status=403, error=Forbidden, message=Could not verify the provided CSRF token because your session was not found.}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@72b3da85]
2019-06-17 13:55:09.532 DEBUG 17719 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2019-06-17 13:55:09.532 DEBUG 17719 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Successfully completed request

Я отладил на уровне фильтра Csrf и обнаружил, что токен передан в заголовке с нулевым значением. Я не понимаю, почему другое весеннее загрузочное приложение не может его обнаружить.

Работает нормально из веб-приложения стот же заголовок на API пользователя.Просто при использовании шаблона rest для вызова API пользователей выдается ошибка.

И мой конфиг CORS таков:

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("OPTIONS");
    config.addAllowedMethod("GET");
    config.addAllowedMethod("POST");
    config.addAllowedMethod("PUT");
    config.addAllowedMethod("DELETE");
    config.addAllowedMethod("PATCH");
    source.registerCorsConfiguration("/**", config);
    return new CorsFilter(source);
...