que feign dzone spring-boot spring-cloud netflix-feign

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:

  1. Callable el Callable en wrapCallable con, por ejemplo, una clase CallableWithAuthentication que contendría la autenticación actual cuando CallableWithAuthentication construida
  2. El método de call CallableWithAuthentication restaurará primero la Authentication previamente guardada, luego llamará a la acción original y luego limpiará la Authentication actual, 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).