【问题标题】:Spring Boot, Feign static header from configurationSpring Boot,来自配置的 Feign 静态标头
【发布时间】:2018-09-14 12:09:24
【问题描述】:

我在从我的 FeignClient 的 application.yml 文件中获取 API 密钥时遇到了一些问题。

@FeignClient(name="CRM-api", url="${api_url}", configuration= <myConfiguration.class>)
@Headers({"Authorization: ${api_key}"})
public interface CRMAPIClient {

是否可以在 Headers 注释中使用占位符值?我也厌倦了在每个端点上设置标头,但它仍然无法检索 api-key 的配置。我设法得到 ${api_url} 但不是 ${api_key} 值

// 莱纳斯

【问题讨论】:

    标签: spring spring-boot netflix-feign


    【解决方案1】:

    我没有使用这种方法,但我会研究一下。 但是,如果要求是将 Authorization 标头注入您的客户端请求,那么更好的方法是在 BasicAuthRequestIntercepter 中写入(供参考,看看 feign 如何使用),然后将标头添加到您的客户端的每个请求中。 如果您使用注释来定义您的 feign 客户端,则使用配置属性来定义配置类,然后在该类中覆盖拦截器相关方法并返回您自己的拦截器。 示例代码:

    import feign.auth.BasicAuthRequestInterceptor;
    
    @Configuration
    public class FeignClientConfiguration {
        @Bean
        public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
            return new BasicAuthRequestInterceptor("Authorization", ${API_KEY});
         }
     }
    

    然后将这个类注入你的 feign 客户端:

    @FeignClient(name="service",configuration = FeignClientConfiguration.class)
    

    注意点:(摘自其他帖子) 在此处使用 @Configuration 会导致此 bean 应用于所有 @FeignClient 并且您不需要 configuration = 部分。如果您删除 @Configuration ,则此 bean 将被忽略,并且 configuration = 部分不执行任何操作。 正确的方法(如果你只希望在一个特定的@FeignClient 上使用它)是添加@Configuration,然后使用 excludeFilters 从@ComponentScan 中排除它

    【讨论】:

      【解决方案2】:

      请删除@Headers 中的“$”符号

      是的,您可以通过以下方式发送-

      @FeignClient(name="email-service", url ="${email.url}")
      public interface EmailService 
      {
      
          @RequestMapping(method = RequestMethod.POST,value="/send_mail", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)                                                                                   
          @Headers({"Content-Type: application/x-www-form-urlencoded","x-auth-id: {email.xauthid}"})
          void sendData(@RequestBody Map<String, ?> formParams);
      }
      
      
      
      In application.properties of define the configuration
      email.url=<<url-for-sending-mail>>
      email.xauthid=110
      
      

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2018-12-19
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 2018-04-23
        • 2021-11-21
        相关资源
        最近更新 更多