spring-boot - dzone - que es feign
Reenviar un encabezado de solicitud con un cliente de Feign RequestInterceptor (1)
Me gustaría reenviar un encabezado de solicitud con un cliente de solicitud de RequestInterceptor pero, dentro de RequestInterceptor.apply , RequestContextHolder.getRequestAttributes() es null , también lo es SecurityContextHolder.getContext().getAuthentication() (donde también podría eventualmente obtener el valor de mi encabezamiento).
Esto solía funcionar antes de actualizar a Spring-Cloud Brixton, donde los comandos de hystrix ahora probablemente se deben ejecutar en un subproceso separado, ya que al cambiar al siguiente parámetro se resuelve el problema:
hystrix.command.default.execution.isolation.strategy: SEMAPHORE
Ahora, no estoy muy interesado en cambiar este tipo de valores predeterminados si no es necesario, ¿hay alguna otra manera recomendada de reenviar encabezados ahora?
Gracias
OK, hay una manera de hacer esto ... muchas gracias a Spring Cloud Sleuth por la inspiración.
"Todo" lo que tienes que hacer es implementar una HystrixConcurrencyStrategy que pase la información a lo largo de cada vez que haya un cambio de hilo. La clase que hace algo muy similar en Sleuth está aquí .
Para mi caso específico, yo:
-
CallableelCallableenwrapCallablecon, por ejemplo, una claseCallableWithAuthenticationque contendría la autenticación actual cuandoCallableWithAuthenticationconstruida - El método de
callCallableWithAuthenticationrestaurará primero laAuthenticationpreviamente guardada, luego llamará a la acción original y luego limpiará laAuthenticationactual, et voilà.
Una vez que su HystrixConcurrencyStrategy su solicitud, el interceptor volverá a funcionar, incluso con el aislamiento de subprocesos.
Observe que en el resto del proyecto hay muchas otras cosas interesantes para instrumentos (para RxJava, por ejemplo).