From f9332cd514c40de10e8839a28fa56939186bd2ae Mon Sep 17 00:00:00 2001 From: "castle.zang" Date: Thu, 17 Jun 2021 18:12:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B9=E6=B3=95=E8=B0=83=E7=94=A8=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-pojo-bsp/pom.xml | 57 ++++++++ .../i3plus/pojo/bsp/server/common/ReturnT.java | 0 .../i3plus/pojo/bsp/server/util/GsonTool.java | 98 +++++++++++++ .../i3plus/pojo/bsp/server/util/HttpUtils.java | 157 +++++++++++++++++++++ 4 files changed, 312 insertions(+) create mode 100644 modules/i3plus-pojo-bsp/pom.xml create mode 100644 modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/common/ReturnT.java create mode 100644 modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/GsonTool.java create mode 100644 modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/HttpUtils.java diff --git a/modules/i3plus-pojo-bsp/pom.xml b/modules/i3plus-pojo-bsp/pom.xml new file mode 100644 index 0000000..faedcff --- /dev/null +++ b/modules/i3plus-pojo-bsp/pom.xml @@ -0,0 +1,57 @@ + + + + i3plus-pojo + i3plus.pojo + 1.0-DEV-SNAPSHOT + ../../pom.xml + + 4.0.0 + + i3plus-pojo-bsp + + + + i3plus.pojo + i3plus-pojo-base + + + com.google.code.gson + gson + + + + + dev + + DEV + + + true + + + + test + + TEST + + + + docker + + DOCKER + + + + prod + + PROD + + + + + ${project.artifactId}-${project.version} + + \ No newline at end of file diff --git a/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/common/ReturnT.java b/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/common/ReturnT.java new file mode 100644 index 0000000..e69de29 diff --git a/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/GsonTool.java b/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/GsonTool.java new file mode 100644 index 0000000..9d9af08 --- /dev/null +++ b/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/GsonTool.java @@ -0,0 +1,98 @@ +package cn.estsh.i3plus.bspserver.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2021/6/17 13:40 + * @Modify: + **/ +public class GsonTool { + private static Gson gson = null; + + static { + gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); + } + + /** + * Object 转成 json + * + * @param src + * @return String + */ + public static String toJson(Object src) { + return gson.toJson(src); + } + + /** + * json 转成 特定的cls的Object + * + * @param json + * @param classOfT + * @return + */ + public static T fromJson(String json, Class classOfT) { + return gson.fromJson(json, classOfT); + } + + /** + * json 转成 特定的 rawClass 的Object + * + * @param json + * @param classOfT + * @param argClassOfT + * @return + */ + public static T fromJson(String json, Class classOfT, Class argClassOfT) { + Type type = new ParameterizedType4ReturnT(classOfT, new Class[]{argClassOfT}); + return gson.fromJson(json, type); + } + + public static class ParameterizedType4ReturnT implements ParameterizedType { + private final Class raw; + private final Type[] args; + + public ParameterizedType4ReturnT(Class raw, Type[] args) { + this.raw = raw; + this.args = args != null ? args : new Type[0]; + } + + @Override + public Type[] getActualTypeArguments() { + return args; + } + + @Override + public Type getRawType() { + return raw; + } + + @Override + public Type getOwnerType() { + return null; + } + } + + /** + * json 转成 特定的cls的list + * + * @param json + * @param classOfT + * @return + */ + public static List fromJsonList(String json, Class classOfT) { + return gson.fromJson( + json, + new TypeToken>() { + }.getType() + ); + } +} diff --git a/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/HttpUtils.java b/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/HttpUtils.java new file mode 100644 index 0000000..c0e5521 --- /dev/null +++ b/modules/i3plus-pojo-bsp/src/main/java/cn/estsh/i3plus/pojo/bsp/server/util/HttpUtils.java @@ -0,0 +1,157 @@ +package cn.estsh.i3plus.bspserver.util; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import cn.estsh.impp.framework.boot.util.ResultBean; +import com.google.gson.Gson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.*; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Map; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2021/6/17 13:37 + * @Modify: + **/ +public class HttpUtils { + private static Logger logger = LoggerFactory.getLogger(HttpUtils.class); + + // trust-https start + private static void trustAllHosts(HttpsURLConnection connection) { + try { + SSLContext sc = SSLContext.getInstance("TLS"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + SSLSocketFactory newFactory = sc.getSocketFactory(); + + connection.setSSLSocketFactory(newFactory); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + connection.setHostnameVerifier(new HostnameVerifier() { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + }); + } + + private static final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return new java.security.cert.X509Certificate[]{}; + } + + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { + } + }}; + // trust-https end + + + /** + * post + * + * @param url + * @param timeout + * @param requestObj + * @param returnTargClassOfT + * @return + */ + public static ResultBean postBody(String url, int timeout, Object requestObj, Class returnTargClassOfT) { + HttpURLConnection connection = null; + BufferedReader bufferedReader = null; + try { + // connection + URL realUrl = new URL(url); + connection = (HttpURLConnection) realUrl.openConnection(); + + // trust-https + boolean useHttps = url.startsWith("https"); + if (useHttps) { + HttpsURLConnection https = (HttpsURLConnection) connection; + trustAllHosts(https); + } + + // connection setting + connection.setRequestMethod("POST"); + connection.setDoOutput(true); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setReadTimeout(timeout * 1000); + connection.setConnectTimeout(3 * 1000); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); + + // do connection + connection.connect(); + + // write requestBody + if (requestObj != null) { + String requestBody = GsonTool.toJson(requestObj); + + DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); + dataOutputStream.write(requestBody.getBytes("UTF-8")); + dataOutputStream.flush(); + dataOutputStream.close(); + } + + + // valid StatusCode + int statusCode = connection.getResponseCode(); + if (statusCode != 200) { + + return new ReturnT(ReturnT.FAIL_CODE, "rpc remoting fail, StatusCode(" + statusCode + ") invalid. for url : " + url); + } + + // result + bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + StringBuilder result = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + result.append(line); + } + String resultJson = result.toString(); + + // parse returnT + try { + + ReturnT returnT = GsonTool.fromJson(resultJson, ReturnT.class); + return returnT; + } catch (Exception e) { + logger.error("rpc remoting (url=" + url + ") response content invalid(" + resultJson + ").", e); + return new ReturnT(ReturnT.FAIL_CODE, "rpc remoting (url=" + url + ") response content invalid(" + resultJson + ")."); + } + + } catch (Exception e) { + logger.error(e.getMessage(), e); + return new ReturnT(ReturnT.FAIL_CODE, "rpc remoting error(" + e.getMessage() + "), for url : " + url); + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + if (connection != null) { + connection.disconnect(); + } + } catch (Exception e2) { + logger.error(e2.getMessage(), e2); + } + } + } + +} \ No newline at end of file