【问题标题】:Feign Request Interceptor dynamic valuesFeign Request Interceptor 动态值
【发布时间】:2018-10-31 14:19:47
【问题描述】:

我是一些 API 的客户端,我需要在每个请求中发送一个令牌,为了获得这个令牌,我需要访问 /auth/token 发送用户名和密码,并考虑使用请求拦截器来解决它.但是每个请求的用户名和密码都不同,有一些方法可以在 feign 请求拦截器中使用动态值,或者在每次 API 调用之前我需要使用普通的 feign 客户端调用/auth/token

我有一个Service 可以访问此令牌 API

@Service
@RequiredArgsConstructor
public class AuthService {
  private final AuthClient client;
  private final AuthProperties properties;

  @Cacheable("tokens")
  public AuthToken getToken(AuthUser user) {
      return client.authenticate(properties.getClientId(), properties.getSecret(), user.getUser(),
            user.getPassword());
  }
}

一个访问令牌API的假客户端

public interface AuthClient {
  @RequestLine("GET /token?client_id={client_id}&client_secret={client_secret}&grant_type=password&username={username}&password={password}")
  AuthToken authenticate(@Param("client_id") String client_id, @Param("client_secret") String client_secret,
                            @Param("username") String username, @Param("password") String password);
}

还有一个使用此服务的RequestInterceptor

@RequiredArgsConstructor
public class AuthRequestInterceptor implements RequestInterceptor {

  private final AuthUser user;
  @Autowired
  private final AuthService authService;

  @Override
  public void apply(RequestTemplate template) {
    AuthToken token = authService.getToken(user);
    template.header("Authorization", "Bearer " + token.getAccess_token());
  }
}

我不确定在构建 feign 客户端以设置每个请求的用户时如何添加此拦截器

【问题讨论】:

  • 是的,有可能。你能说明一下你到目前为止做了什么吗?
  • 您好,我的情况类似。您将如何获得“私人最终 AuthUser 用户”中的用户
  • 据我所知,由于每个请求都有不同的用户,我们最终没有使用请求拦截器

标签: java feign


【解决方案1】:

使用 Spring 时,您需要将 RequestInterceptor 注册为 @Bean 以使其自动应用。如果你没有使用 Spring,或者手动构建 Feign Clients,请使用 Feign.builder.interceptor() 方法注册拦截器。

【讨论】:

    【解决方案2】:

    在你的 Feign @Configuration 类中添加一个拦截 bean:

    @Bean
    public RequestInterceptor myInterceptor() {
      return template -> {
        // For example, add a header to an intercepted query:
        template.header(
          MY_HEADER_NAME,
          MY_HEADER_VALUE);
      };
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-28
      • 2022-01-16
      • 2015-03-17
      • 2021-11-13
      • 2019-09-01
      • 1970-01-01
      • 2018-10-14
      • 2021-03-15
      • 2020-01-14
      相关资源
      最近更新 更多