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);
}
@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);
}
}
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>