2017-10-06 8 views
0

Je me repose org.apache.cxf.jaxrs.client.WebClient client pour le test:CXF RESTful client

 WebClient client = WebClient.create(URL); 

et je veux faire https demande avec CxF JAX-RS

Comment puis-je le faire? Exemples?

+0

Avez-vous lu les documents? http://cxf.apache.org/docs/jax-rs-client-api.html –

+0

Oui, mais je n'ai pas trouvé d'exemple complet de client de repos jax-rs cxf avec les requêtes https – Manuel

+0

Eh bien, utilisez juste https au lieu de http. Ou avez-vous des problèmes avec les certificats? –

Répondre

0

ok, voici ma solution:

public static void configureSSLOnTheClient(WebClient client, 
     String keyStoreFileName, String keyStorePassword, 
     String trustStoreFileName, String trustStorePassword) { 

    HTTPConduit httpConduit = (HTTPConduit) WebClient.getConfig(client).getConduit(); 
    try { 
     TLSClientParameters tlsParams = new TLSClientParameters(); 

     KeyStore keyStore; 
     KeyStore trustStore; 
     try { 

      keyStore = KeyStore.getInstance("JKS"); 
      keyStore.load(ClassLoader.getSystemResourceAsStream(keyStoreFileName), keyStorePassword.toCharArray()); 

      KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
      keyManagerFactory.init(keyStore, keyStorePassword.toCharArray()); 

      trustStore = KeyStore.getInstance("JKS"); 
      trustStore.load(ClassLoader.getSystemResourceAsStream(trustStoreFileName), trustStorePassword.toCharArray()); 

      TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
      trustManagerFactory.init(trustStore); 

      SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); 
      sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom()); 

      tlsParams.setSSLSocketFactory(sslContext.getSocketFactory()); 

     } catch (KeyStoreException e) { 
      e.printStackTrace(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (CertificateException e) { 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     // These filters ensure that a ciphersuite with export-suitable or null encryption is used, 
     // but exclude anonymous Diffie-Hellman key change as this is vulnerable to man-in-the-middle attacks 

     FiltersType filters = new FiltersType(); 
     filters.getInclude().add(".*_EXPORT_.*"); 
     filters.getInclude().add(".*_EXPORT1024_.*"); 
     filters.getInclude().add(".*_WITH_DES_.*"); 
     filters.getInclude().add(".*_WITH_AES_.*"); 
     filters.getInclude().add(".*_WITH_NULL_.*"); 
     filters.getExclude().add(".*_DH_anon_.*"); 

     tlsParams.setCipherSuitesFilter(filters); 

     httpConduit.setTlsClientParameters(tlsParams); 

    } catch (Exception exception) { 
     LOGGER.error("Security configuration failed with the following: " + exception.getCause(), exception); 
    } 
}