789f93072796534e7318efd85c3a70306dbb1620
[institute/sw-backend.git] /
1 package com.supwisdom.institute.backend.gateway.authn.remote.configuration;
2
3 import javax.net.ssl.SSLContext;
4
5 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
6 import org.apache.http.impl.client.CloseableHttpClient;
7 import org.apache.http.impl.client.HttpClients;
8 import org.apache.http.ssl.SSLContextBuilder;
9 import org.apache.http.ssl.SSLContexts;
10 import org.springframework.beans.factory.annotation.Value;
11 import org.springframework.context.annotation.Bean;
12 import org.springframework.context.annotation.Configuration;
13 import org.springframework.http.client.ClientHttpRequestFactory;
14 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
15 import org.springframework.http.client.SimpleClientHttpRequestFactory;
16 import org.springframework.util.ResourceUtils;
17 import org.springframework.web.client.RestTemplate;
18
19 @Configuration
20 public class AuthnRestTemplateConfig {
21
22   @Bean
23   public ClientHttpRequestFactory simpleClientHttpRequestFactory(
24       @Value("${sw-backend-base-api.client-auth.enabled:false}") boolean enabled,
25       @Value("${sw-backend-base-api.client-auth.key-password:}") String keyPassword,
26       @Value("${sw-backend-base-api.client-auth.key-store:}") String keyStore,
27       @Value("${sw-backend-base-api.client-auth.key-store-password:}") String keyStorePassword,
28       @Value("${sw-backend-base-api.client-auth.trust-store:}") String trustStore,
29       @Value("${sw-backend-base-api.client-auth.trust-store-password:}") String trustStorePassword
30   ) {
31     if (!enabled) {
32       SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
33       factory.setReadTimeout(5000);// 单位为ms
34       factory.setConnectTimeout(5000);// 单位为ms
35       return factory;
36     }
37     
38     SSLContextBuilder sslContextBuilder = SSLContexts.custom();
39     
40     if (trustStore == null || trustStore.isEmpty()) {
41     } else {
42       try {
43         sslContextBuilder
44           .loadTrustMaterial(
45               ResourceUtils.getFile(trustStore),
46               trustStorePassword.toCharArray()
47           );
48       } catch (Exception e) {
49         e.printStackTrace();
50       }
51     }
52     
53     if (keyStore == null || keyStore.isEmpty()) {
54       SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
55       factory.setReadTimeout(5000);// 单位为ms
56       factory.setConnectTimeout(5000);// 单位为ms
57       return factory;
58     } else {
59       try {
60         sslContextBuilder
61           .loadKeyMaterial(
62               ResourceUtils.getFile(keyStore),
63               keyStorePassword.toCharArray(),
64               keyPassword.toCharArray());
65       } catch (Exception e) {
66         e.printStackTrace();
67       }
68     }
69     
70     try {
71       SSLContext sslContext = sslContextBuilder.build();
72   
73       SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
74           sslContext,
75           SSLConnectionSocketFactory.getDefaultHostnameVerifier());
76       
77       CloseableHttpClient httpClient = HttpClients.custom()
78           .setSSLSocketFactory(sslsf)
79           .build();
80       
81       HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
82       factory.setReadTimeout(5000);// 单位为ms
83       factory.setConnectTimeout(5000);// 单位为ms
84       return factory;
85     } catch (Exception e) {
86       e.printStackTrace();
87     }
88     
89     SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
90     factory.setReadTimeout(5000);// 单位为ms
91     factory.setConnectTimeout(5000);// 单位为ms
92     return factory;
93   }
94   
95   @Bean(name = "authnAccountRestTemplate")
96   public RestTemplate authnAccountRestTemplate(ClientHttpRequestFactory requestFactory) {
97     return new RestTemplate(requestFactory);
98   }
99   
100 }