2017-08-24 59 views
0

我試圖設置我的Spring Cloud Feign客戶端以使用自定義的HostnameVerifier。我需要自定義的HostnameVerifier來忽略證書問題。我怎樣才能做到這一點?如何在Feign-Client中設置HostnameVerifier從spring-cloud-netflix-feign

這裏是我目前的配置:

@FeignClient(name = "AccountSettingsClient", url = "${account.settings.service.url}", decode404 = true, 
     configuration = AccountSettingsClientConfig.class, fallbackFactory = AccountSettingsClientFallbackFactory.class) 
public interface AccountSettingsClient { 
    @RequestMapping(method = RequestMethod.GET, value = "/settings/{uuid}") 
    AccountSettings accountSettings(@PathVariable("uuid") String uuid); 
} 

@Component 
@Slf4j 
class AccountSettingsClientFallbackFactory implements FallbackFactory<AccountSettingsClient> { 
    @Override 
    public AccountSettingsClient create(Throwable cause) { 
     return uuid -> { 
      log.warn("Falling back to null.", cause); 
      return null; 
     }; 
    } 
} 

@Configuration 
@RequiredArgsConstructor 
@EnableConfigurationProperties(SomeProperties.class) 
@EnableFeignClients 
public class AccountSettingsClientConfig { 
    private final SomeProperties someProperties; 

    @Bean 
    RequestInterceptor oauth2FeignRequestInterceptor() { 
     return new OAuth2FeignRequestInterceptor(new 
      DefaultOAuth2ClientContext(), resource()); 
    } 
} 

回答

0

默認有被創建一個LoadBalancerFeignClient在船上一個HttpURLConnection類,不能重寫它的HostnameVerifier的設置。爲了覆蓋它,請選擇另一個客戶端,如OkHttp或Apache Http Client,添加記者maven依賴關係,然後您可以用所有設置覆蓋客戶端。

我選擇了OkHttpClient並添加到我的AccountSettingsConfig後續豆:

@Bean 
public okhttp3.OkHttpClient okHttpClient() { 
    return new OkHttpClient.Builder().hostnameVerifier((s, sslSession) -> true) 
      .build(); 
}