Я получаю 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);