В классическом spring -mvc можно установить атрибуты области запроса для RequestContextHolder
. Основываясь на этом, мы можем анализировать входящий запрос в HandlerInterceptorAdapter
, устанавливать параметры запроса, такие как текущий авторизованный пользователь, уникальный идентификатор запроса (для корреляции журнала) и так далее. Эти атрибуты запроса можно получить статически из любой службы (не только из контроллеров) в течение срока действия запроса.
Я пытаюсь добиться чего-то подобного с помощью spring -webflux.
Я мог бы использовать WebFilter
, чтобы перехватывать все входящие запросы, получать текущий ServerWebExchange
и устанавливать для него атрибуты. Однако я не вижу способа получить ServerWebExchange
текущего запроса где-либо еще, кроме методов контроллера.
Я ищу лучшее решение, чем передавать ServerWebExchange
(или ServerHttpRequest
) всем подряд.
Похоже, что в webflux этого сложно достичь, поскольку мы не можем полагаться на сохранение переменных, связанных с конкретным запросом, в ThreadLocal (из-за неблокирующей архитектуры один поток может переключаться между запросами в середине полета).
Тем не менее, это важное требование. Может есть другой подход?