首页  编辑  

OpenFeign调用API如何添加Auth等认证

Tags: /Java/   Date Created:
SpringBoot中,用OpenFeign调用第三方API非常方便,但是如果第三方API,有认证,例如Auth,那么如何实现呢?
用 configuration = Config.class即可。例如:

@FeignClient(name = "Demo-Svc", url = "${demo-service.url}", configuration = DemoFeignConfig.class)
public interface DemoService {
  @PostMapping("/api/user/get")
  User getUser(@RequestBody JSONObject request);
}

//DemoFeignConfig.class:
@Configuration
public class DemoFeignConfig {
  @Value("${demo-service.username}")
  private String username;
  @Value("${demo-service.password}")
  private String password;

  @Bean
  public CustomFeignHeaderInterceptor customFeignHeaderInterceptor() {
    return new CustomFeignHeaderInterceptor(username, password);
  }
}

// CustomFeignHeaderInterceptor.class
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.apache.tomcat.util.codec.binary.Base64;

public class CustomFeignHeaderInterceptor implements RequestInterceptor {
    private final String authUsername;
    private final String authPassword;

    public CustomFeignHeaderInterceptor(String authUsername, String authPassword) {
        this.authUsername = authUsername;
        this.authPassword = authPassword;
    }

    public void apply(RequestTemplate requestTemplate) {
        String userCredentials = this.authUsername + ":" + this.authPassword;
        String basicAuth = "Basic " + Base64.encodeBase64String(userCredentials.getBytes());
        requestTemplate.header("Authorization", new String[]{basicAuth});
    }
}
Application.yml:
demo-service:
  url: https://www.abc.com
  username: <username>
  password: <password>