#spring-boot #spring-security #spring-security-oauth2
#spring-boot #spring-безопасность #spring-security-oauth2
Вопрос:
Я использую CompletableFuture, который вызывает вспомогательный метод, который делает запрос к внешнему API и получает данные. Прежде чем он отправит запрос, я перехватываю и выполняю требуемую авторизацию OAuth2.
Но для запроса я получаю исключение «запрос сервлета не может быть нулевым«, и во время процесса отладки я выяснил, что атрибуты объекта RequestContextHolder имеют значение null, и причиной этого является то, что код выполняется в отдельном потоке. Есть ли какая-либо конфигурация, которую я могу сделать, чтобы всякий раз, когда я использую завершаемое future и вызываю внешний api, он имеет требуемые атрибуты для объекта RequestContextHolder .
#Snippet from the DefaultOAuth2AuthorizedClientManager class provided by the spring secur
private static HttpServletRequest getHttpServletRequestOrDefault(Map<String, Object> attributes) {
HttpServletRequest servletRequest = (HttpServletRequest) attributes.get(HttpServletRequest.class.getName());
if (servletRequest == null) {
RequestAttributes context = RequestContextHolder.getRequestAttributes();
if (context instanceof ServletRequestAttributes) {
servletRequest = ((ServletRequestAttributes) context).getRequest();
}
}
return servletRequest;
}
#Code snippet
CompletableFuture<UserDto> userDetailsFuture = CompletableFuture
.supplyAsync(() -> {
//Helper method makes a request to the external API and get the data
return clientHelper.getUserDetails(userId);
});
Комментарии:
1. @ark- вы нашли какое-либо решение этой проблемы?