2017-08-24 1 views
0

J'essaie de configurer mon client Spring Cloud Feign pour qu'il utilise HostnameVerifier personnalisé. J'ai besoin du HostnameVerifier personnalisé pour ignorer les problèmes de certificat. Comment puis je faire ça?Comment définir HostnameVerifier dans Feign-Client à partir de spring-cloud-netflix-feign

voici ma config actuelle:

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

Répondre

0

Par défaut, il est créé un LoadBalancerFeignClient avec un HttpURLConnection à bord et ne peut pas remplacer les paramètres de HostnameVerifier de celui-ci. Pour le surcharger, choisissez un autre client comme OkHttp ou Apache Http Client, ajoutez la dépendance de maven correspondant et vous pouvez remplacer le client avec tous les paramètres.

J'ai choisi le OkHttpClient et ajouté à mon haricot AccountSettingsConfig de suivi:

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