commit ee0857614eb08a04fc8d7c472b521cb1def28a09 Author: pioneer Date: Tue Nov 29 17:01:19 2022 +0800 open diff --git a/README.md b/README.md new file mode 100644 index 0000000..711ea49 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# open-JSD-10242 + +JSD-10242 平台开放接口给第三方调用\ +免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ +仅作为开发者学习参考使用!禁止用于任何商业用途!\ +为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 \ No newline at end of file diff --git a/lib/commons-codec-1.11.jar b/lib/commons-codec-1.11.jar new file mode 100644 index 0000000..2245120 Binary files /dev/null and b/lib/commons-codec-1.11.jar differ diff --git a/lib/commons-logging-1.2.jar b/lib/commons-logging-1.2.jar new file mode 100644 index 0000000..93a3b9f Binary files /dev/null and b/lib/commons-logging-1.2.jar differ diff --git a/lib/httpclient-4.5.5.jar b/lib/httpclient-4.5.5.jar new file mode 100644 index 0000000..7796b0e Binary files /dev/null and b/lib/httpclient-4.5.5.jar differ diff --git a/lib/httpcore-4.4.9.jar b/lib/httpcore-4.4.9.jar new file mode 100644 index 0000000..cddba28 Binary files /dev/null and b/lib/httpcore-4.4.9.jar differ diff --git a/lib/java-sdk-core-3.0.10.jar b/lib/java-sdk-core-3.0.10.jar new file mode 100644 index 0000000..41d01d3 Binary files /dev/null and b/lib/java-sdk-core-3.0.10.jar differ diff --git a/lib/joda-time-2.9.9.jar b/lib/joda-time-2.9.9.jar new file mode 100644 index 0000000..b3080c4 Binary files /dev/null and b/lib/joda-time-2.9.9.jar differ diff --git a/lib/okhttp-3.11.0.jar b/lib/okhttp-3.11.0.jar new file mode 100644 index 0000000..aa428e6 Binary files /dev/null and b/lib/okhttp-3.11.0.jar differ diff --git a/lib/okio-1.15.0.jar b/lib/okio-1.15.0.jar new file mode 100644 index 0000000..ab8ab73 Binary files /dev/null and b/lib/okio-1.15.0.jar differ diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..763651a --- /dev/null +++ b/plugin.xml @@ -0,0 +1,37 @@ + + + com.fr.plugin.xx.zheneng.proxy + + yes + 1.0.0 + 10.0~11.0 + 2021-01-01 + fr.open + + + ]]> + + + + org.apache.commons.codec + org.apache.commons.logging + org.apache.http + com.cloud + org.joda.time + okhttp3 + okio + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/MyLocaleFinder.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/MyLocaleFinder.java new file mode 100644 index 0000000..a0237c2 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/MyLocaleFinder.java @@ -0,0 +1,10 @@ +package com.fr.plugin.xx.zheneng.proxy; + +import com.fr.stable.fun.impl.AbstractLocaleFinder; + +public class MyLocaleFinder extends AbstractLocaleFinder { + @Override + public String find() { + return "com/fr/plugin/demo"; + } +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/config/ApiProxyConfig.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/config/ApiProxyConfig.java new file mode 100644 index 0000000..db469d2 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/config/ApiProxyConfig.java @@ -0,0 +1,38 @@ +package com.fr.plugin.xx.zheneng.proxy.config; + +import com.fr.config.*; +import com.fr.config.holder.Conf; +import com.fr.config.holder.factory.Holders; + +@Visualization(category = "API请求代理配置-华为", priority = 1) +public class ApiProxyConfig extends DefaultConfiguration { + private static volatile ApiProxyConfig config = null; + + public static ApiProxyConfig getInstance() { + synchronized (ApiProxyConfig.class) { + if (config == null) { + config = ConfigContext.getTenantConfig(ApiProxyConfig.class); + } + } + return config; + } + + @Identifier(value = "appKey", name = "AppKey", description = "华为AppKey", status = Status.SHOW) + private Conf appKey = Holders.simple(""); + + @Identifier(value = "appSecret", name = "AppSecret", description = "华为AppSecret", status = Status.SHOW, encrypted = true) + private Conf appSecret = Holders.simple(""); + + public String getAppKey() { + return appKey.get(); + } + + public String getAppSecret() { + return appSecret.get(); + } + + @Override + public String getNameSpace() { + return this.getClass().getName(); + } +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/HttpHandlerProvider.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/HttpHandlerProvider.java new file mode 100644 index 0000000..a1451c3 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/HttpHandlerProvider.java @@ -0,0 +1,19 @@ +package com.fr.plugin.xx.zheneng.proxy.http; + +import com.fr.decision.fun.HttpHandler; +import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; +import com.fr.plugin.xx.zheneng.proxy.config.ApiProxyConfig; +import com.fr.plugin.xx.zheneng.proxy.util.Constants; +import com.fr.stable.fun.Authorize; + +@Authorize(callSignKey = Constants.PLUGIN_ID) +public class HttpHandlerProvider extends AbstractHttpHandlerProvider { + + @Override + public HttpHandler[] registerHandlers() { + ApiProxyConfig.getInstance(); + return new HttpHandler[]{ + new xxWebProvider(), + }; + } +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/HuaweiWebProvider.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/HuaweiWebProvider.java new file mode 100644 index 0000000..4e71752 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/HuaweiWebProvider.java @@ -0,0 +1,45 @@ +package com.fr.plugin.xx.zheneng.proxy.http; + +import com.fr.decision.fun.impl.BaseHttpHandler; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.plugin.xx.zheneng.proxy.xx.xxAppRequest; +import com.fr.plugin.xx.zheneng.proxy.util.Constants; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.third.springframework.web.bind.annotation.RequestMethod; +import com.fr.web.utils.WebUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@EnableMetrics +public class xxWebProvider extends BaseHttpHandler { + @Override + public RequestMethod getMethod() { + return RequestMethod.POST; + } + + + @Override + public String getPath() { + return "/proxy/xx"; + } + + @Override + public boolean isPublic() { + return true; + } + + @Focus(id = Constants.PLUGIN_ID, text = "API代理插件 ", source = Original.PLUGIN) + @Override + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + String proxyRequestType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyRequestType"); + if ("IAM".equals(proxyRequestType)) { + + } else if ("NOTYPE".equals(proxyRequestType)) { + + } else { + xxAppRequest.action(httpServletRequest, httpServletResponse); + } + } +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/URLAliasBridge.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/URLAliasBridge.java new file mode 100644 index 0000000..4045dc8 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/URLAliasBridge.java @@ -0,0 +1,15 @@ +package com.fr.plugin.xx.zheneng.proxy.http; + +import com.fr.decision.fun.impl.AbstractURLAliasProvider; +import com.fr.decision.webservice.url.alias.URLAlias; +import com.fr.decision.webservice.url.alias.URLAliasFactory; + +public class URLAliasBridge extends AbstractURLAliasProvider { + @Override + public URLAlias[] registerAlias() { + return new URLAlias[]{ + URLAliasFactory.createPluginAlias("/proxy/xx", "/proxy/xx", true), +// URLAliasFactory.createPluginAlias("/multicpt/ppt/export", "/multicpt/ppt/export", true), + }; + } +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/xxWebProvider.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/xxWebProvider.java new file mode 100644 index 0000000..4e71752 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/http/xxWebProvider.java @@ -0,0 +1,45 @@ +package com.fr.plugin.xx.zheneng.proxy.http; + +import com.fr.decision.fun.impl.BaseHttpHandler; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.plugin.xx.zheneng.proxy.xx.xxAppRequest; +import com.fr.plugin.xx.zheneng.proxy.util.Constants; +import com.fr.record.analyzer.EnableMetrics; +import com.fr.third.springframework.web.bind.annotation.RequestMethod; +import com.fr.web.utils.WebUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@EnableMetrics +public class xxWebProvider extends BaseHttpHandler { + @Override + public RequestMethod getMethod() { + return RequestMethod.POST; + } + + + @Override + public String getPath() { + return "/proxy/xx"; + } + + @Override + public boolean isPublic() { + return true; + } + + @Focus(id = Constants.PLUGIN_ID, text = "API代理插件 ", source = Original.PLUGIN) + @Override + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + String proxyRequestType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyRequestType"); + if ("IAM".equals(proxyRequestType)) { + + } else if ("NOTYPE".equals(proxyRequestType)) { + + } else { + xxAppRequest.action(httpServletRequest, httpServletResponse); + } + } +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/huawei/HuaweiAppRequest.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/huawei/HuaweiAppRequest.java new file mode 100644 index 0000000..543745f --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/huawei/HuaweiAppRequest.java @@ -0,0 +1,98 @@ +package com.fr.plugin.xx.zheneng.proxy.huawei; + +import com.cloud.apigateway.sdk.utils.Client; +import com.cloud.apigateway.sdk.utils.Request; +import com.fr.decision.webservice.Response; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.xx.zheneng.proxy.config.ApiProxyConfig; +import com.fr.stable.StringUtils; +import com.fr.third.fasterxml.jackson.databind.ObjectMapper; +import com.fr.web.utils.WebUtils; +import okhttp3.Headers; +import okhttp3.OkHttpClient; +import okhttp3.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Enumeration; +import java.util.UUID; + +public class HuaweiAppRequest { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static void action(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + String url = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyUrl"); + String requestType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyRequestType"); +// String contentType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyContentType"); + if (StringUtils.isBlank(url) && StringUtils.isBlank(requestType)) { + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 和请求类型不应为空"))); + return; + } + if (url.contains("public/com.fr.plugin.xx.zheneng.proxy/proxy/huawei") || url.contains("url/proxy/huawei")) { + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 不能代理为自己"))); + return; + } + Request request = new Request(); + try { + //key和secret, 为访问API所属的APP的key和secret + request.setKey(ApiProxyConfig.getInstance().getAppKey()); + request.setSecret(ApiProxyConfig.getInstance().getAppSecret()); + //接口访问类型 + request.setMethod(requestType); + //接口访问url + request.setUrl(url); + //API中 header头传输的参数 + request.addHeader("x-api-id", UUID.randomUUID().toString().replace("-", "")); + request.addHeader("Content-Type", "application/json"); + //API中 Query传输的参数 +// request.addQueryStringParam("name", "value"); + Enumeration enumeration = httpServletRequest.getHeaderNames(); + while (enumeration.hasMoreElements()) { + String headerName = enumeration.nextElement(); + String headerValue = httpServletRequest.getHeader(headerName); + request.addHeader(headerName, headerValue); + } + //API中 Body体参数 + if ("POST".equals(requestType)) { + String bodyData = IOUtils.inputStream2String(httpServletRequest.getInputStream()); + System.out.println(bodyData); + request.setBody(bodyData); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求参数错误 " + e.getMessage()))); + return; + } + + try { + //Sign the request. + okhttp3.Request signedRequest = Client.signOkhttp(request); + String authorization = signedRequest.header("Authorization"); + signedRequest = signedRequest.newBuilder().addHeader("x-Authorization", authorization).build(); + //Send the request. + long startDate = System.currentTimeMillis(); + FineLoggerFactory.getLogger().info("Api request start with {}", url); + OkHttpClient client = new OkHttpClient.Builder().build(); + okhttp3.Response response = client.newCall(signedRequest).execute(); + //Print the status line of the response. + FineLoggerFactory.getLogger().info("Api request end with {} use {}", url, (System.currentTimeMillis() - startDate), String.valueOf(response.code())); + //Print the header fields of the response. + Headers resHeaders = response.headers(); + for (String h : resHeaders.names()) { + httpServletResponse.addHeader(h, resHeaders.get(h)); + } + //Print the body of the response. + ResponseBody resEntity = response.body(); + if (resEntity != null) { + String data = resEntity.string(); + FineLoggerFactory.getLogger().debug("Api request end with {} and data is", url, resEntity); + WebUtils.printAsString(httpServletResponse, data); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("500", request.getUrl() + " 请求错误 " + e.getMessage()))); + } + } + +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/util/Constants.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/util/Constants.java new file mode 100644 index 0000000..8707432 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/util/Constants.java @@ -0,0 +1,5 @@ +package com.fr.plugin.xx.zheneng.proxy.util; + +public interface Constants { + String PLUGIN_ID = "com.fr.plugin.xx.zheneng.proxy"; +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/xx/HuaweiAppRequest.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/xx/HuaweiAppRequest.java new file mode 100644 index 0000000..618921d --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/xx/HuaweiAppRequest.java @@ -0,0 +1,98 @@ +package com.fr.plugin.xx.zheneng.proxy.xx; + +import com.cloud.apigateway.sdk.utils.Client; +import com.cloud.apigateway.sdk.utils.Request; +import com.fr.decision.webservice.Response; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.xx.zheneng.proxy.config.ApiProxyConfig; +import com.fr.stable.StringUtils; +import com.fr.third.fasterxml.jackson.databind.ObjectMapper; +import com.fr.web.utils.WebUtils; +import okhttp3.Headers; +import okhttp3.OkHttpClient; +import okhttp3.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Enumeration; +import java.util.UUID; + +public class xxAppRequest { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static void action(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + String url = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyUrl"); + String requestType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyRequestType"); +// String contentType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyContentType"); + if (StringUtils.isBlank(url) && StringUtils.isBlank(requestType)) { + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 和请求类型不应为空"))); + return; + } + if (url.contains("public/com.fr.plugin.xx.zheneng.proxy/proxy/xx") || url.contains("url/proxy/xx")) { + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 不能代理为自己"))); + return; + } + Request request = new Request(); + try { + //key和secret, 为访问API所属的APP的key和secret + request.setKey(ApiProxyConfig.getInstance().getAppKey()); + request.setSecret(ApiProxyConfig.getInstance().getAppSecret()); + //接口访问类型 + request.setMethod(requestType); + //接口访问url + request.setUrl(url); + //API中 header头传输的参数 + request.addHeader("x-api-id", UUID.randomUUID().toString().replace("-", "")); + request.addHeader("Content-Type", "application/json"); + //API中 Query传输的参数 +// request.addQueryStringParam("name", "value"); + Enumeration enumeration = httpServletRequest.getHeaderNames(); + while (enumeration.hasMoreElements()) { + String headerName = enumeration.nextElement(); + String headerValue = httpServletRequest.getHeader(headerName); + request.addHeader(headerName, headerValue); + } + //API中 Body体参数 + if ("POST".equals(requestType)) { + String bodyData = IOUtils.inputStream2String(httpServletRequest.getInputStream()); + System.out.println(bodyData); + request.setBody(bodyData); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求参数错误 " + e.getMessage()))); + return; + } + + try { + //Sign the request. + okhttp3.Request signedRequest = Client.signOkhttp(request); + String authorization = signedRequest.header("Authorization"); + signedRequest = signedRequest.newBuilder().addHeader("x-Authorization", authorization).build(); + //Send the request. + long startDate = System.currentTimeMillis(); + FineLoggerFactory.getLogger().info("Api request start with {}", url); + OkHttpClient client = new OkHttpClient.Builder().build(); + okhttp3.Response response = client.newCall(signedRequest).execute(); + //Print the status line of the response. + FineLoggerFactory.getLogger().info("Api request end with {} use {}", url, (System.currentTimeMillis() - startDate), String.valueOf(response.code())); + //Print the header fields of the response. + Headers resHeaders = response.headers(); + for (String h : resHeaders.names()) { + httpServletResponse.addHeader(h, resHeaders.get(h)); + } + //Print the body of the response. + ResponseBody resEntity = response.body(); + if (resEntity != null) { + String data = resEntity.string(); + FineLoggerFactory.getLogger().debug("Api request end with {} and data is", url, resEntity); + WebUtils.printAsString(httpServletResponse, data); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("500", request.getUrl() + " 请求错误 " + e.getMessage()))); + } + } + +} diff --git a/src/main/java/com/fr/plugin/xx/zheneng/proxy/xx/xxAppRequest.java b/src/main/java/com/fr/plugin/xx/zheneng/proxy/xx/xxAppRequest.java new file mode 100644 index 0000000..7f670e3 --- /dev/null +++ b/src/main/java/com/fr/plugin/xx/zheneng/proxy/xx/xxAppRequest.java @@ -0,0 +1,98 @@ +package com.fr.plugin.zk.zheneng.proxy.xx; + +import com.cloud.apigateway.sdk.utils.Client; +import com.cloud.apigateway.sdk.utils.Request; +import com.fr.decision.webservice.Response; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.zk.zheneng.proxy.config.ApiProxyConfig; +import com.fr.stable.StringUtils; +import com.fr.third.fasterxml.jackson.databind.ObjectMapper; +import com.fr.web.utils.WebUtils; +import okhttp3.Headers; +import okhttp3.OkHttpClient; +import okhttp3.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Enumeration; +import java.util.UUID; + +public class xxAppRequest { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static void action(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { + String url = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyUrl"); + String requestType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyRequestType"); +// String contentType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyContentType"); + if (StringUtils.isBlank(url) && StringUtils.isBlank(requestType)) { + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 和请求类型不应为空"))); + return; + } + if (url.contains("public/com.fr.plugin.zk.zheneng.proxy/proxy/xx") || url.contains("url/proxy/xx")) { + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 不能代理为自己"))); + return; + } + Request request = new Request(); + try { + //key和secret, 为访问API所属的APP的key和secret + request.setKey(ApiProxyConfig.getInstance().getAppKey()); + request.setSecret(ApiProxyConfig.getInstance().getAppSecret()); + //接口访问类型 + request.setMethod(requestType); + //接口访问url + request.setUrl(url); + //API中 header头传输的参数 + request.addHeader("x-api-id", UUID.randomUUID().toString().replace("-", "")); + request.addHeader("Content-Type", "application/json"); + //API中 Query传输的参数 +// request.addQueryStringParam("name", "value"); + Enumeration enumeration = httpServletRequest.getHeaderNames(); + while (enumeration.hasMoreElements()) { + String headerName = enumeration.nextElement(); + String headerValue = httpServletRequest.getHeader(headerName); + request.addHeader(headerName, headerValue); + } + //API中 Body体参数 + if ("POST".equals(requestType)) { + String bodyData = IOUtils.inputStream2String(httpServletRequest.getInputStream()); + System.out.println(bodyData); + request.setBody(bodyData); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求参数错误 " + e.getMessage()))); + return; + } + + try { + //Sign the request. + okhttp3.Request signedRequest = Client.signOkhttp(request); + String authorization = signedRequest.header("Authorization"); + signedRequest = signedRequest.newBuilder().addHeader("x-Authorization", authorization).build(); + //Send the request. + long startDate = System.currentTimeMillis(); + FineLoggerFactory.getLogger().info("Api request start with {}", url); + OkHttpClient client = new OkHttpClient.Builder().build(); + okhttp3.Response response = client.newCall(signedRequest).execute(); + //Print the status line of the response. + FineLoggerFactory.getLogger().info("Api request end with {} use {}", url, (System.currentTimeMillis() - startDate), String.valueOf(response.code())); + //Print the header fields of the response. + Headers resHeaders = response.headers(); + for (String h : resHeaders.names()) { + httpServletResponse.addHeader(h, resHeaders.get(h)); + } + //Print the body of the response. + ResponseBody resEntity = response.body(); + if (resEntity != null) { + String data = resEntity.string(); + FineLoggerFactory.getLogger().debug("Api request end with {} and data is", url, resEntity); + WebUtils.printAsString(httpServletResponse, data); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("500", request.getUrl() + " 请求错误 " + e.getMessage()))); + } + } + +} diff --git a/src/main/resources/com/fr/plugin/demo.properties b/src/main/resources/com/fr/plugin/demo.properties new file mode 100644 index 0000000..9bc5f29 --- /dev/null +++ b/src/main/resources/com/fr/plugin/demo.properties @@ -0,0 +1 @@ +Plugin-Test_Function_Abs=Test ABS \ No newline at end of file diff --git a/src/main/resources/com/fr/plugin/demo_zh_CN.properties b/src/main/resources/com/fr/plugin/demo_zh_CN.properties new file mode 100644 index 0000000..aa910e8 --- /dev/null +++ b/src/main/resources/com/fr/plugin/demo_zh_CN.properties @@ -0,0 +1 @@ +Plugin-Test_Function_Abs=测试ABS函数 \ No newline at end of file