Commit d40c801a authored by helei's avatar helei

1

parent 795de3af
...@@ -78,7 +78,11 @@ ...@@ -78,7 +78,11 @@
<version>2.2</version> <version>2.2</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.12</version>
</dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
......
package com.example.data_push.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Author hl
* @Date 2022-10-31 09:33
* 省平台参数
*/
@Component
@ConfigurationProperties(prefix = "zyb")
@Data
public class ZybConfig {
/**
* 机构编码
*/
private String userId;
/**
* 机构名称
*/
private String name;
/**
* 机构密码
*/
private String password;
/**
* 私钥
*/
private String privateKey;
/**
* 申报地址
*/
private String url;
/**
* 填报人/报告人
*/
private String person;
/**
* 填报人电话/报告电话
*/
private String phone;
private String aa = "2233";
}
...@@ -27,7 +27,7 @@ public class PushDataController { ...@@ -27,7 +27,7 @@ public class PushDataController {
@ApiOperation(value = "数据推送", response = R.class) @ApiOperation(value = "数据推送", response = R.class)
@PostMapping(value = "/push") @PostMapping(value = "/push")
public R pushData(@Validated DataDto dto){ public R pushData(@Validated DataDto dto) throws Exception {
return pushDataService.pushData(dto); return pushDataService.pushData(dto);
} }
......
...@@ -16,6 +16,8 @@ public class DataDto implements Serializable { ...@@ -16,6 +16,8 @@ public class DataDto implements Serializable {
@ApiModelProperty(value = "用户原始数据") @ApiModelProperty(value = "用户原始数据")
private String dataJson; private String dataJson;
/**
* 正式申报地址
*/
private String zsUrl;
} }
...@@ -15,7 +15,7 @@ public interface PushDataService { ...@@ -15,7 +15,7 @@ public interface PushDataService {
* @param dto * @param dto
* @return * @return
*/ */
R pushData(DataDto dto); R pushData(DataDto dto) throws Exception;
......
package com.example.data_push.service.impl; package com.example.data_push.service.impl;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.api.R; import com.baomidou.mybatisplus.extension.api.R;
import com.example.data_push.config.ZybConfig;
import com.example.data_push.dto.DataDto; import com.example.data_push.dto.DataDto;
import com.example.data_push.service.PushDataService; import com.example.data_push.service.PushDataService;
import com.example.data_push.util.JsonToXml2; import com.example.data_push.util.HttpclientUtils;
import com.example.data_push.vo.ZybVo;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -27,15 +21,10 @@ import java.text.MessageFormat; ...@@ -27,15 +21,10 @@ import java.text.MessageFormat;
@Service @Service
public class PushDataServiceImpl implements PushDataService { public class PushDataServiceImpl implements PushDataService {
@Autowired
private ZybConfig zybConfig;
@Override @Override
public R pushData(DataDto dto){ public R pushData(DataDto dto) throws Exception {
if (StringUtils.isEmpty(dto.getDataJson())){ log.info("入参数据:" + new Gson().toJson(dto));
if (StringUtils.isEmpty(dto.getDataJson())) {
return R.failed("无法获取到推送数据"); return R.failed("无法获取到推送数据");
} }
//转义处理 //转义处理
...@@ -51,13 +40,16 @@ public class PushDataServiceImpl implements PushDataService { ...@@ -51,13 +40,16 @@ public class PushDataServiceImpl implements PushDataService {
"</soapenv:Body>" + "</soapenv:Body>" +
"</soapenv:Envelope>"; "</soapenv:Envelope>";
String format = MessageFormat.format(soapui, dto.getDataJson()); String format = MessageFormat.format(soapui, dto.getDataJson());
log.info("获取原始数据成功,原始数据为:"+format); log.info("获取原始数据成功,原始数据为:" + format);
String result = HttpUtil.post(zybConfig.getUrl(), format); // Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("59.175.177.218", 8443));
// String result = HttpUtil.createPost(dto.getZsUrl()).body(format).setProxy(proxy).execute().body();
// String result = HttpUtil.post(dto.getZsUrl(), format);
String result = HttpclientUtils.getResultByProxy(dto.getZsUrl(), format, "59.175.177.218", 8443);
log.info("调用省直平台成功,转义前:" + result); log.info("调用省直平台成功,转义前:" + result);
result = StringEscapeUtils.unescapeXml(result); result = StringEscapeUtils.unescapeXml(result);
log.info("转义后:" + result); log.info("转义后:" + result);
if (!result.contains("<data>")){ if (!result.contains("<data>")) {
return R.failed("调用省直平台推送失败"); return R.failed("调用省直平台推送失败");
} }
String substring = result.substring(result.indexOf("<data>"), result.indexOf("</data>") + 7); String substring = result.substring(result.indexOf("<data>"), result.indexOf("</data>") + 7);
log.info("单位申报成功"); log.info("单位申报成功");
...@@ -65,7 +57,4 @@ public class PushDataServiceImpl implements PushDataService { ...@@ -65,7 +57,4 @@ public class PushDataServiceImpl implements PushDataService {
} }
} }
package com.example.data_push.util;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
public class HttpClientProxy {
/**
* java使用代理发送http请求
* @return
*/
public static String httpPost(String ip,Integer port,String url) {
String content = null;
DefaultHttpClient httpclient = null;
try {
httpclient = new DefaultHttpClient();
/** 设置代理IP **/
HttpHost proxy = new HttpHost(ip, port);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
HttpPost httpget = new HttpPost(url);
httpget.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,1000*30); //设置请求超时时间
httpget.setHeader("Proxy-Authorization","Basic eXVsb3JlOll1bG9yZVByb3h5MjAxMzo=");
httpget.setHeader("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1");
httpget.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
HttpResponse responses = httpclient.execute(httpget);
HttpEntity entity = responses.getEntity();
content = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
httpclient.getConnectionManager().shutdown(); //关闭连接
}
return content;
}
}
\ No newline at end of file
package com.example.data_push.util;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import javax.servlet.http.HttpServletRequest;
/**
* Http Post Get 工具
*/
public class HttpUtils {
public static String doPost(String url, String data) throws Exception {
CloseableHttpClient httpClient = HttpClients.custom().build();
HttpPost httpPost = new HttpPost(url);
if (!StringUtils.isEmpty(data)) {
StringEntity entity = new StringEntity(data);
httpPost.setEntity(entity);
}
CloseableHttpResponse response = httpClient.execute(httpPost);
return EntityUtils.toString(response.getEntity());
}
public static String doPost2(String url) throws Exception {
CloseableHttpClient httpClient = HttpClients.custom().build();
HttpPost httpPost = new HttpPost(url);
CloseableHttpResponse response = httpClient.execute(httpPost);
return EntityUtils.toString(response.getEntity());
}
public static String doGet(String url) throws Exception {
CloseableHttpClient httpClient = HttpClients.custom().build();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = httpClient.execute(httpGet);
return EntityUtils.toString(response.getEntity());
}
public static String getClientIp(HttpServletRequest request) {
if (request == null) {
return "127.0.0.1";
}
String ip = request.getHeader("X-Requested-For");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Forwarded-For");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
\ No newline at end of file
package com.example.data_push.util;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import javax.net.ssl.SSLContext;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class HttpclientUtils {
private static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
public static String getResultByProxy(String url, String request, String proxyHost, int proxyPort) throws Exception {
String response = null;
HttpPost httpPost = null;
try {
HttpClient httpClient = getHttpClient(url);
//设置请求配置类 重点就是在这里添加setProxy 设置代理
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(15000)
.setConnectionRequestTimeout(15000).setProxy(new HttpHost(proxyHost, proxyPort)).build();
httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
httpPost.addHeader("Content-Type", CONTENT_TYPE);
httpPost.setEntity(new StringEntity(request, "utf-8"));
response = getHttpClientResponse(httpPost, httpClient);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != httpPost) {
httpPost.releaseConnection();
}
}
return response;
}
private static String getHttpClientResponse(HttpPost httpPost, HttpClient httpClient) throws Exception {
String result = null;
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity entity = httpResponse.getEntity();
if (null != entity) {
try (InputStream inputStream = entity.getContent()) {
byte[] bytes = read(inputStream, 1024);
result = new String(bytes, StandardCharsets.UTF_8);
}
}
return result;
}
private static HttpClient getHttpClient(String url) throws Exception {
HttpClient httpClient;
String lowerURL = url.toLowerCase();
if (lowerURL.startsWith("https")) {
httpClient = createSSLClientDefault();
} else {
httpClient = HttpClients.createDefault();
}
return httpClient;
}
private static CloseableHttpClient createSSLClientDefault() throws Exception {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (chain, authType) -> true).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, (s, sslSession) -> true);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
public static byte[] read(InputStream inputStream, int bufferSize) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[bufferSize];
for (int num = inputStream.read(buffer); num != -1; num = inputStream.read(buffer)) {
baos.write(buffer, 0, num);
}
baos.flush();
return baos.toByteArray();
}
}
package com.example.data_push.util;
import javax.net.ssl.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class ProxyUtils {
public static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
public static String getResultByHttpConnectionProxy(String url, String content, String proxyHost, int proxyPort) {
String result = "";
OutputStream outputStream = null;
InputStream inputStream = null;
try {
//设置proxy
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
URL proxyUrl = new URL(url);
//判断是哪种类型的请求
if (url.startsWith("https")) {
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) proxyUrl.openConnection(proxy);
httpsURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE);
//允许写入
httpsURLConnection.setDoInput(true);
//允许写出
httpsURLConnection.setDoOutput(true);
//请求方法的类型 POST/GET
httpsURLConnection.setRequestMethod("POST");
//是否使用缓存
httpsURLConnection.setUseCaches(false);
//读取超时
httpsURLConnection.setReadTimeout(15000);
//连接超时
httpsURLConnection.setConnectTimeout(15000);
//设置SSL
httpsURLConnection.setSSLSocketFactory(getSsf());
//设置主机验证程序
httpsURLConnection.setHostnameVerifier((s, sslSession) -> true);
outputStream = httpsURLConnection.getOutputStream();
outputStream.write(content.getBytes(StandardCharsets.UTF_8));
outputStream.flush();
inputStream = httpsURLConnection.getInputStream();
} else {
HttpURLConnection httpURLConnection = (HttpURLConnection) proxyUrl.openConnection(proxy);
httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setUseCaches(false);
httpURLConnection.setConnectTimeout(15000);
httpURLConnection.setReadTimeout(15000);
outputStream = httpURLConnection.getOutputStream();
outputStream.write(content.getBytes("UTF-8"));
outputStream.flush();
inputStream = httpURLConnection.getInputStream();
}
byte[] bytes = read(inputStream, 1024);
result = (new String(bytes, "UTF-8")).trim();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
public static byte[] read(InputStream inputStream, int bufferSize) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[bufferSize];
for (int num = inputStream.read(buffer); num != -1; num = inputStream.read(buffer)) {
baos.write(buffer, 0, num);
}
baos.flush();
return baos.toByteArray();
}
private static SSLSocketFactory getSsf() {
SSLContext ctx = null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0],
new TrustManager[]{new ProxyUtils.DefaultTrustManager()},
new SecureRandom());
} catch (Exception e) {
e.printStackTrace();
}
assert ctx != null;
return ctx.getSocketFactory();
}
private static final class DefaultTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}
...@@ -4,18 +4,6 @@ server: ...@@ -4,18 +4,6 @@ server:
swagger: swagger:
enable: true enable: true
zyb: Djava:
#申报地址 net:
url: http://47.99.104.188:8083/ws_data/ws/TJ?wsdl preferIPy4Stack: true
#机构编码 \ No newline at end of file
userId: 420502015
#机构名称
name: 宜昌市疾病预防控制中心
#机构密码
password: ycjk420502015#zyb
#填报人/报告人
person: 徐兵
#填报人电话/报告电话
phone: 15971628128
#私钥
privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCzvxunu6Ijjzi6w5SvF+l4pfFR/wkO9tK7Mc25BkoIBcBrQAragOJ5DPZnq5Z+Bwm4yMTwWtlQTR/m9jG/t0yKWv5D715kuvJsZxk5ymkYU6PJ8E0WXp9Xkb3rsNaLCpwPQcQb3Hfvqtdbk7J56jjIMTGVNDYpQvvEQsZuoE64QKmsDV+FEcSAl8NBdZ2tblyafk7zn26HyEfuOJ8TXSdQ1HwQQAUP+ko0WSzTVDi4VkBbTlTzY74S4JughXIsSSWTXlRnsb/MHAFmA/7FEjMkLARPYUB1QBUZ0/lSy315B6HG3hBmT+W7nQMfz1jnHkbA6B3FFGmBV4Qtd7FjvVHZAgMBAAECggEBAJ8KEisoTv8No1FE6hK+oppYoZw+f0JZS/3LxE3Y7boJdMawpKnO7hPTT1ZNMVwTWBvCsNZGXA+8HeUaoswSIEwu1NlBO5D/BK67zkse+DxJDRwJXfvT/0LZNmULU9k0qv6o3x8TxJ8v11s05O8QOeuP82IkD2QU23U87BxIBT7qpCfRXw/Zh9pBAEYCsRK1kfpci7TaP9KMh5BkED5PGkny7/RAuYaQGSNyM8eskmIOURAMrMxjiBGRL/LN7GK/edB9DacjTQxFMil6aCi++jQxiP8FCP8rTd789rEEADxAo/Q8izd9cnzWhXepqqf0/dlVmvaHFMsxvGeSyC6RHu0CgYEA3Z3PcvQZ7IEN1Bb8ghjJCu7mlJkTNdCYjs9NlRkqaG7045nhdvhHkdyvjCUfC07Ru5y7zGUu4UuRqXjqK3992uE3E5rklxERFc2sWRhW5osA9xSrxkJ0Wmcm09KcoXH2VN9IIPDIvxyPs64E71B0jm8dqGCvsgST5S+MsIvN/SsCgYEAz6JNc49+0pdOcndF1YZtZfqEkmgwiothott9BjJW6K1FMYEgDBANqnpEwfkRUNwwRCwVDX9gM0gHcRsyeQOHDM0CUGNEJ4J3VQsp+BEwfWYIa9lStJC7c6muBIJWvLL+NcEJu66wBwYAEa0sXuOFf2BN/cTEl1ZzSFmzUzwr0wsCgYEArWcAXdLPwfUMq+m8c9MO44YgVx8bH91ysTNVYhdJzmMbLEdIWj1USrYhiYe2LbPjeWfercRyFQh7Fd6tY5GjGTNlU+q7d9R7yNKgSyo3PLaA79N1wHBY+C+D+vPtaIlyE+CNYHDmslqXuiCsbdBHEvewfgIBF0prqkU1USJi7/cCgYEAwpWOFCCEcANQh0Fz9rm2SH3QRAzUgOJCrAcaUfZXMFNBpzUlvWhGBl/zk/1A1xCjQyA00qNummCEaOFeGb7Oj5aI9qEwu/4uq0p9GHezg7FdbwUJ1yJUKf74kE090DXGusWfw33ghZR/+BDcpkh/UXIFZS9ENbfU7hbyUazwPSUCgYA2cuIVgWX4c3wkqgrZfFq7xhfMU7sPqqkPwao1hYpyACiF1LmL39FB+hFP68ZRYPVC1qWDdmSnxk/nXbEwvMormDtqxFWVttjxPDqnr3uQjbsuK3t9GFHmdrQB7kUzp0O7LJX6+4FxPTgd9MYcRJhXhHQ3JA02IiMqK7991fvnTA==
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment