#java #spring #spring-security #oauth-2.0
#java #весна #spring-безопасность #oauth-2.0
Вопрос:
Я реализовал архитектуру микросервисов. Перед доступом к каждой микросервисе запрос проходит через шлюз, который проверяет аутентификацию и в процессе добавляет X-User
заголовок, содержащий идентификатор пользователя.
В каждой из моих микросервисов я хотел бы иметь возможность извлекать this user ( X-User
) элегантным способом: без добавления HttpRequest
/ @RequestHeader
ко всем моим контроллерам и передачи его службам и т.д.
Использование чего-то вроде « SecurityContextHolder.getContext().getAuthentication().getUserId();
» было бы идеальным, но поскольку я не управляю аутентификацией в своих микросервисах, это невозможно.
Комментарии:
1. Вы могли бы использовать пользовательский фильтр
2. В вашем вопросе не хватает ясности, где вы хотите получить значение и как вы собираетесь его использовать (по крайней мере, где)?
Ответ №1:
Вы должны быть в состоянии:
- внедрите сервлет
Filter
(подробнее см. В Этой статье Baeldung), который получаетuserId
данные изServletRequest
и сохраняет их в aThreadLocal
(подробнее см. В Этой статье Baeldung). - извлеките это
ThreadLocal
из любого класса, который нуждался бы вuserId
Удачи!