gpt4 book ai didi

spring-boot - 使用Feign客户端RequestInterceptor转发请求 header 或安全上下文

转载 作者:行者123 更新时间:2023-12-04 12:30:08 24 4
gpt4 key购买 nike

我想转发带有伪客户端RequestInterceptor的请求 header ,但是在RequestInterceptor.apply内,RequestContextHolder.getRequestAttributes()nullSecurityContextHolder.getContext().getAuthentication()也是如此(在这里我最终也可以获取 header 的值)。

在升级到Spring-Cloud Brixton之前,这可以正常工作,因为现在将hystrix命令现在可能必须在单独的线程中运行,因为更改为以下参数可以解决此问题:

hystrix.command.default.execution.isolation.strategy: SEMAPHORE

现在,如果不需要,我不太想更改这种默认值,现在是否有另一种推荐的转发 header 的方法?

谢谢

最佳答案

对于Spring Boot 2 +/Spring Cloud Finchley +,如果只需要安全上下文,则可以设置以下属性:

hystrix.shareSecurityContext=true

并且请求拦截器应该起作用。

对于其他用例或更早的版本(非常感谢 Spring Cloud Sleuth的启发):

您要做的“全部”是实现一个 HystrixConcurrencyStrategy,该代码在每次线程更改时都会传递信息。在Sleuth中执行类似操作的类是 here

对于我的具体情况,我会:
  • 用例如Callable类将wrapCallable包装在CallableWithAuthentication中,该类将在构造
  • 时保留当前身份验证
  • CallableWithAuthentication call方法将首先还原先前保存的Authentication,然后调用原始操作,然后清除当前的Authentication等。

  • 一旦 HystrixConcurrencyStrategy启动,即使使用线程隔离,您的请求拦截器也将再次起作用。

    请注意检查项目的其余部分,还有很多其他有趣的工具(例如RxJava)。

    关于spring-boot - 使用Feign客户端RequestInterceptor转发请求 header 或安全上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34062900/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com