Advertisement
Guest User

Untitled

a guest
Oct 9th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.78 KB | None | 0 0
  1. package cat.gencat.salut.forms.service.rest.impl;
  2.  
  3. import java.nio.charset.Charset;
  4. import java.security.KeyManagementException;
  5. import java.security.KeyStoreException;
  6. import java.security.NoSuchAlgorithmException;
  7. import java.security.cert.X509Certificate;
  8.  
  9. import javax.net.ssl.SSLContext;
  10.  
  11. import org.apache.http.conn.ssl.NoopHostnameVerifier;
  12. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  13. import org.apache.http.impl.client.CloseableHttpClient;
  14. import org.apache.http.impl.client.HttpClients;
  15. import org.apache.http.ssl.SSLContexts;
  16. import org.apache.http.ssl.TrustStrategy;
  17. import org.apache.logging.log4j.LogManager;
  18. import org.apache.logging.log4j.Logger;
  19. import org.springframework.http.HttpEntity;
  20. import org.springframework.http.ResponseEntity;
  21. import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
  22. import org.springframework.http.client.support.BasicAuthorizationInterceptor;
  23. import org.springframework.http.converter.StringHttpMessageConverter;
  24. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import org.springframework.util.LinkedMultiValueMap;
  28. import org.springframework.util.MultiValueMap;
  29. import org.springframework.web.client.RestTemplate;
  30.  
  31. import cat.gencat.salut.forms.dto.RESTRequest;
  32. import cat.gencat.salut.forms.service.rest.RESTClientService;
  33.  
  34. @Service("restService")
  35. @Transactional("txManager")
  36. public class RESTClientServiceImpl implements RESTClientService {
  37.  
  38.     private static final Logger log = LogManager.getLogger(RESTClientServiceImpl.class);
  39.        
  40.     public <T> ResponseEntity<?> jsonSecuredRequest(RESTRequest<T> requestInfo) {
  41.         MultiValueMap<String, String> headers = jsonHeaders();
  42.         return securedRestRequest(requestInfo, headers);
  43.     }
  44.    
  45.     @Override
  46.     public <T> ResponseEntity<?> xmlSecuredRequest(RESTRequest<T> requestInfo) {
  47.         MultiValueMap<String, String> headers = xmlHeaders();
  48.         return securedRestRequest(requestInfo, headers);
  49.     }
  50.    
  51.     @Override
  52.     public <T> ResponseEntity<?> octetStreamSecuredRequest(RESTRequest<T> requestInfo) {
  53.         MultiValueMap<String, String> headers = octetStreamHeaders();
  54.         return securedRestRequest(requestInfo, headers);
  55.     }
  56.    
  57.     private <T> ResponseEntity<?> securedRestRequest(RESTRequest<T> requestInfo, MultiValueMap<String, String> headers) {
  58.         String user = requestInfo.getBasicAuthentication()==null?null:requestInfo.getBasicAuthentication().get("user");
  59.         String password = requestInfo.getBasicAuthentication()==null?null:requestInfo.getBasicAuthentication().get("password");
  60.  
  61.         SSLContext sslContext = null;
  62.         try {
  63.             sslContext = org.apache.http.ssl.SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
  64.                 public boolean isTrusted(X509Certificate[] chain, String authType) {
  65.                     return true;
  66.                 }
  67.             }).build();
  68.         } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
  69.             log.error("Error al generar el SSLContext", e);
  70.         }
  71.         SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
  72.         CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build();
  73.         HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
  74.         requestFactory.setHttpClient(httpClient);
  75.        
  76.         RestTemplate template = new RestTemplate(requestFactory);
  77.         if(user!=null && password!=null){
  78.             template.getInterceptors().add(new BasicAuthorizationInterceptor(user, password));
  79.         }
  80.         template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
  81.         template.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
  82.         HttpEntity<T> entity = new HttpEntity<>(requestInfo.getPayload(), headers);    
  83.         return template.exchange(requestInfo.getEndpoint() + requestInfo.getPath(), requestInfo.getMethod(), entity, requestInfo.getReponseType());
  84.     }
  85.    
  86.     public <T> void restBasicRequest(RESTRequest<T> requestInfo) {
  87.         String user = requestInfo.getBasicAuthentication().get("user");
  88.         String password = requestInfo.getBasicAuthentication().get("password");  
  89.         MultiValueMap<String, String> headers = jsonHeaders();
  90.  
  91.         CloseableHttpClient httpClient = HttpClients.custom().build();
  92.         HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
  93.         requestFactory.setHttpClient(httpClient);
  94.        
  95.         RestTemplate template = new RestTemplate(requestFactory);
  96.         template.getInterceptors().add(new BasicAuthorizationInterceptor(user, password));
  97.         template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
  98.         HttpEntity<T> entity = new HttpEntity<>(requestInfo.getPayload(), headers);    
  99.         template.exchange(requestInfo.getEndpoint(), requestInfo.getMethod(), entity, requestInfo.getReponseType());
  100.     }
  101.    
  102.     public <T> void restRequest(RESTRequest<T> requestInfo) {
  103.         MultiValueMap<String, String> headers = jsonHeaders();
  104.  
  105.         CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
  106.         HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
  107.         requestFactory.setHttpClient(httpClient);
  108.        
  109.         RestTemplate template = new RestTemplate(requestFactory);
  110.         template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
  111.         HttpEntity<T> entity = new HttpEntity<>(requestInfo.getPayload(), headers);    
  112.         //HttpEntity<String> entity = new HttpEntity<>("{}", headers); 
  113.         template.exchange(requestInfo.getEndpoint(), requestInfo.getMethod(), entity, requestInfo.getReponseType());
  114.     }
  115.    
  116.     public <T> void restSSLRequest(RESTRequest<T> requestInfo) {
  117.         MultiValueMap<String, String> headers = jsonHeaders();
  118.        
  119.         SSLContext sslContext = null;
  120.         try {
  121.             sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {
  122.                 public boolean isTrusted(X509Certificate[] chain, String authType) {
  123.                     return true;
  124.                 }
  125.             }).build();
  126.         } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
  127.             log.error("Error al generar el SSLContext", e);
  128.         }
  129.         SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
  130.  
  131.         CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build();
  132.         HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
  133.         requestFactory.setHttpClient(httpClient);
  134.        
  135.         RestTemplate template = new RestTemplate(requestFactory);
  136.         template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
  137.         HttpEntity<T> entity = new HttpEntity<>(requestInfo.getPayload(), headers);    
  138.         //HttpEntity<String> entity = new HttpEntity<>("{}", headers); 
  139.         template.exchange(requestInfo.getEndpoint(), requestInfo.getMethod(), entity, requestInfo.getReponseType());
  140.     }
  141.  
  142.     private MultiValueMap<String, String> jsonHeaders() {
  143.         MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
  144.         headers.add("Content-Type", "application/json");
  145.         headers.add("Accept", "application/json, text/plain, */*");
  146.         return headers;
  147.     }
  148.    
  149.     private MultiValueMap<String, String> xmlHeaders() {
  150.         MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
  151.         headers.add("Content-Type", "application/xml");
  152.         headers.add("Accept", "application/xml, text/plain, */*");
  153.         return headers;
  154.     }
  155.    
  156.     private MultiValueMap<String, String> octetStreamHeaders() {
  157.         MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
  158.         headers.add("Content-Type", "application/octet-stream");
  159.         headers.add("Accept", "application/xml, text/plain, */*");
  160.         return headers;
  161.     }
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement