当前位置: 首页 > 知识库问答 >
问题:

“全球”飞航拦截器未被所有飞航客户端接收

拓拔德馨
2023-03-14

我们在应用程序中使用了Open-Feign,它运行在Spring Boot 2.0.6和Spring Cloud Finchley上。SR2。

我们需要所有的费恩客户端在每次调用的标头中从安全上下文中添加一个令牌,因此我们创建了一个配置,为所有客户端生成一个全局拦截器:

@Configuration
@Import({FeignClientsConfiguration.class})
public class FeignConfig {

   @Value("${a.spring.config}")
   private int minTokenLifespan;

   @Autowired
   private OAuthContext oAuthContext;

   @Autowired
   private AuthManager authManager;

   @Bean
   public RequestInterceptor myCustomInterceptor() {
       return new CustomInterceptor(oAuthContext, authManager, minTokenLifespan);
   }
}

拦截器适用于除一个外的所有外国客户。在调试器中,我们可以看到,这个特殊的外部客户机(以及它的SynchronousMessageHandler)是在类中创建Bean之前创建的。CustomIntercepter只在第一个外国客户机之后创建,所有其他客户机都是在第一个外国客户机之后创建的,知道侦听器的存在并将应用它。

我们如何调试这个问题?过去有没有人遇到过不同的问题?

我不能发布生产代码,但我很乐意回答任何问题,并尝试发布模糊代码。

共有1个答案

彭胡媚
2023-03-14

这指出了在创建第一个客户机时创建拦截器的问题。

尝试在组织中放置一个条件断点。springframework。豆。工厂支持RequestInterceptor上的DefaultListableBeanFactory#getBeansOfType。类。您可能会看到,存在一个循环依赖关系,它要求在实例化类之前创建第一个客户端。

考虑以下示例:

@Configuration
@EnableFeignClients(
  clients = {
    MyFirstClient.class, // will NOT have CustomInterceptor registered
    MySecondClient.class // will have CustomInterceptor registered
  })
public class FeignConfig {

  @Autowired
  private BeanDependentOnMyFirstClient beanDependentOnMyFirstClient;

  @Bean
  public RequestInterceptor myCustomInterceptor() {
    return new CustomInterceptor();
  }
}

这将导致以下循环依赖:

由于客户端和拦截器之间的依赖关系很弱,如果不能满足依赖关系,它只会默默地失败。

 类似资料:
  • 我想拦截mqtt客户端发送到artemis代理的消息。我遵循的是“拦截器-客户端-MQTT”示例。我的问题是我总是得到一个错误“java.lang.ClassNotFoundException:SimpleMQTTInterceptor”。我的问题是我应该把拦截器类放在哪里,以便代理可以找到它?我应该只放拦截器的类,还是放一个jar文件?

  • ruby api for china mobile's fetion 最简单的飞信客户端 示例代码: fetion = Fetion.new("mobile ID","password") fetion.login fetion.send_sms("mobile ID","any sms") fetion.send_sms_to_self("test-中文-ruby-fetion")

  • 我在artemis代理中添加了一个mqtt拦截器,以便拦截mqtt客户端连接: 我的客户端apache paho通过这个端口“WS://0.0.0.0:61614”连接到代理。 我的问题是只截获发布到主题的消息。 为什么不截获连接消息?

  • 我想拦截改造引擎收到的所有响应,并扫描HTTP错误代码,例如错误403。 我知道我可以使用每个请求的failure(reformationerror error)回调并检查403,但我想将响应打包为全局响应。 我可以看到请求拦截是可能的,但我看不到类似的响应选项。 有什么建议吗?

  • 问题很简单 在这里打破头! 编辑:一个小突破。我打印了目标,它返回的是SimpleJPrepository,而不是实际的存储库。

  • 1、自我介绍 2、项目介绍,登录流程,防重复提交,操作日志,AOP 3、单线程和多线程,多线程的应用场景,解决了什么问题,如何实现 4、TCP、HTTP、HTTPS各自的特点和区别 5、OSI七层模型,TCP/IP五层模型 6、HTTP请求方法,get和post区别 7、输入url到渲染页面的过程 8、了解哪些设计模式,实现单例模式(DCL) 9、算法题:leetcode215 数组中的第k个最大