首页 > 解决方案 > 如何将参数传递给 FeignRequestInterceptor?

问题描述

我有这个代码

@Component()
public class FeignRequestInterceptor {

    @Bean
    public RequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("username", "password");
    }
}

有没有办法可以将用户名和密码作为参数传递?

我有一个拦截请求的过滤器,那里有一些标头,我想使用这些标头来设置userpassword所以当我稍后使用 feign 客户端处理另一个请求时,我有这些标头

标签: javaspring-bootspring-cloud-feignfeign

解决方案


伙计们,我找到了这个解决方案,不知道它是否是最好的,但它确实有效。

我从上面删除了代码,甚至删除了过滤器来拦截请求,我使用了这个

@Configuration
public class FeignRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();
        String token = "Basic " + Base64.getEncoder().encodeToString(
                (request.getParameter("username") + ":" + request.getParameter("password")).getBytes(Charsets.UTF_8));
        template.header("Authorization", token);
    }
}

推荐阅读