diff --git a/ensign-module-infra/ensign-module-infra-biz/src/main/java/com/ensign/crm/module/infra/framework/security/config/SecurityConfiguration.java b/ensign-module-infra/ensign-module-infra-biz/src/main/java/com/ensign/crm/module/infra/framework/security/config/SecurityConfiguration.java
index cb64177..a402b9e 100644
--- a/ensign-module-infra/ensign-module-infra-biz/src/main/java/com/ensign/crm/module/infra/framework/security/config/SecurityConfiguration.java
+++ b/ensign-module-infra/ensign-module-infra-biz/src/main/java/com/ensign/crm/module/infra/framework/security/config/SecurityConfiguration.java
@@ -37,6 +37,8 @@ public class SecurityConfiguration {
.antMatchers(adminSeverContextPath + "/**").anonymous();
// 文件读取
registry.antMatchers(buildAdminApi("/infra/file/*/get/**")).permitAll();
+
+ registry.antMatchers("/crm/**").permitAll();
}
};
diff --git a/ensign-server/pom.xml b/ensign-server/pom.xml
index 0d0c422..1d35351 100644
--- a/ensign-server/pom.xml
+++ b/ensign-server/pom.xml
@@ -31,83 +31,6 @@
ensign-module-infra-biz
${revision}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
org.springframework.boot
diff --git a/ensign-server/src/main/java/com/ensign/crm/server/controller/DefaultController.java b/ensign-server/src/main/java/com/ensign/crm/server/controller/DefaultController.java
deleted file mode 100644
index b560713..0000000
--- a/ensign-server/src/main/java/com/ensign/crm/server/controller/DefaultController.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ensign.crm.server.controller;
-
-import com.ensign.crm.framework.common.pojo.CommonResult;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import static com.ensign.crm.framework.common.exception.enums.GlobalErrorCodeConstants.NOT_IMPLEMENTED;
-
-/**
- * 默认 Controller,解决部分 module 未开启时的 404 提示。
- * 例如说,/bpm/** 路径,工作流
- *
- * @author 芋道源码
- */
-@RestController
-public class DefaultController {
-
- @RequestMapping("/admin-api/bpm/**")
- public CommonResult bpm404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[工作流模块 ensign-module-bpm - 已禁用][参考 https://doc.iocoder.cn/bpm/ 开启]");
- }
-
- @RequestMapping("/admin-api/mp/**")
- public CommonResult mp404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[微信公众号 ensign-module-mp - 已禁用][参考 https://doc.iocoder.cn/mp/build/ 开启]");
- }
-
- @RequestMapping(value = {"/admin-api/product/**", // 商品中心
- "/admin-api/trade/**", // 交易中心
- "/admin-api/promotion/**"}) // 营销中心
- public CommonResult mall404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[商城系统 ensign-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
- }
-
- @RequestMapping("/admin-api/erp/**")
- public CommonResult erp404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[ERP 模块 ensign-module-erp - 已禁用][参考 https://doc.iocoder.cn/erp/build/ 开启]");
- }
-
- @RequestMapping("/admin-api/crm/**")
- public CommonResult crm404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[CRM 模块 ensign-module-crm - 已禁用][参考 https://doc.iocoder.cn/crm/build/ 开启]");
- }
-
- @RequestMapping(value = {"/admin-api/report/**"})
- public CommonResult report404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[报表模块 ensign-module-report - 已禁用][参考 https://doc.iocoder.cn/report/ 开启]");
- }
-
- @RequestMapping(value = {"/admin-api/pay/**"})
- public CommonResult pay404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[支付模块 ensign-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]");
- }
-
- @RequestMapping(value = {"/admin-api/ai/**"})
- public CommonResult ai404() {
- return CommonResult.error(NOT_IMPLEMENTED.getCode(),
- "[AI 大模型 ensign-module-ai - 已禁用][参考 https://doc.iocoder.cn/ai/build/ 开启]");
- }
-
-}
diff --git a/ensign-server/src/main/java/com/ensign/crm/server/controller/ProxyController.java b/ensign-server/src/main/java/com/ensign/crm/server/controller/ProxyController.java
new file mode 100644
index 0000000..2c498f0
--- /dev/null
+++ b/ensign-server/src/main/java/com/ensign/crm/server/controller/ProxyController.java
@@ -0,0 +1,74 @@
+package com.ensign.crm.server.controller;
+
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.ClientHttpRequest;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.util.StreamUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+/**
+ * @Description: TODO
+ * @Date: 2024/9/20 18:28
+ * @Created: by ZZSLL
+ */
+
+
+@RestController
+@RequestMapping("/ensign/crm")
+public class ProxyController {
+
+ private String targetAddr = "http://10.64.112.152:8022";
+
+
+ @RequestMapping(value = "/proxy/**", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+ public void proxy(HttpServletRequest request, HttpServletResponse response) throws IOException, URISyntaxException {
+ URI uri = new URI(request.getRequestURI());
+ String path = uri.getPath();
+ String query = request.getQueryString();
+ String target = targetAddr + path.replace("/ensign/crm/proxy", "");
+ if (query != null && !query.isEmpty() && !query.equals("null")) {
+ target = target + "?" + query;
+ }
+ URI newUri = new URI(target);
+ // 执行代理查询
+ String methodName = request.getMethod();
+ HttpMethod httpMethod = HttpMethod.resolve(methodName);
+ if (httpMethod == null) {
+ return;
+ }
+ ClientHttpRequest delegate = new SimpleClientHttpRequestFactory().createRequest(newUri, httpMethod);
+ Enumeration headerNames = request.getHeaderNames();
+ // 设置请求头
+ while (headerNames.hasMoreElements()) {
+ String headerName = headerNames.nextElement();
+ Enumeration v = request.getHeaders(headerName);
+ List arr = new ArrayList<>();
+ while (v.hasMoreElements()) {
+ arr.add(v.nextElement());
+ }
+ delegate.getHeaders().addAll(headerName, arr);
+ }
+ StreamUtils.copy(request.getInputStream(), delegate.getBody());
+ // 执行远程调用
+ ClientHttpResponse clientHttpResponse = delegate.execute();
+ response.setStatus(clientHttpResponse.getStatusCode().value());
+ // 设置响应头
+ clientHttpResponse.getHeaders().forEach((key, value) -> value.forEach(it -> {
+ response.setHeader(key, it);
+ }));
+ StreamUtils.copy(clientHttpResponse.getBody(), response.getOutputStream());
+ }
+
+}
diff --git a/ensign-server/src/main/java/com/ensign/crm/server/exception/AllKingdeeException.java b/ensign-server/src/main/java/com/ensign/crm/server/exception/AllKingdeeException.java
new file mode 100644
index 0000000..b7b3547
--- /dev/null
+++ b/ensign-server/src/main/java/com/ensign/crm/server/exception/AllKingdeeException.java
@@ -0,0 +1,13 @@
+package com.ensign.crm.server.exception;
+
+/**
+ * @Description: TODO
+ * @Date: 2024/9/20 18:33
+ * @Created: by ZZSLL
+ */
+
+public class AllKingdeeException extends Exception {
+ public AllKingdeeException(String message) {
+ super(message);
+ }
+}
diff --git a/ensign-server/src/main/java/com/ensign/crm/server/utils/ProxyUtils.java b/ensign-server/src/main/java/com/ensign/crm/server/utils/ProxyUtils.java
new file mode 100644
index 0000000..486a23d
--- /dev/null
+++ b/ensign-server/src/main/java/com/ensign/crm/server/utils/ProxyUtils.java
@@ -0,0 +1,85 @@
+package com.ensign.crm.server.utils;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.ensign.crm.server.exception.AllKingdeeException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description: TODO
+ * @Date: 2024/9/20 18:33
+ * @Created: by ZZSLL
+ */
+
+
+@Slf4j
+public class ProxyUtils {
+
+ public void initAppToken() throws IOException, AllKingdeeException
+ {
+
+ final String END_POINT = "/ierp/api/getAppToken.do";
+
+ HttpClient client = new DefaultHttpClient();
+
+ HttpPost post = new HttpPost(END_POINT);
+
+ Map body = new HashMap<>();
+
+ body.put("appId", "");
+ body.put("appSecuret", "");
+ body.put("tenantid", "");
+ body.put("accountId", "");
+ body.put("language", "");
+
+ HttpEntity reqEntity = new StringEntity(JSONUtil.toJsonStr(body), "utf-8");
+
+ post.setEntity(reqEntity);
+ post.setConfig(RequestConf.initRequestConfig());
+ HttpResponse response = client.execute(post);
+
+ if (response.getStatusLine().getStatusCode() == 200) {
+
+ HttpEntity resEntity = response.getEntity();
+ String responseData = EntityUtils.toString(resEntity, "utf-8");
+
+ JSONObject jsonObject = JSONUtil.parseObj(responseData);
+
+ Boolean status = (Boolean) jsonObject.get("status");
+
+ String state = (String) jsonObject.get("state");
+
+ if (status && "success".equals(state)) {
+
+ JSONObject data = (JSONObject) jsonObject.get("data");
+
+ String appToken = (String) data.get("app_token");
+
+ if (appToken != null && !appToken.isEmpty()) {
+
+ Long expireTime = (Long) data.get("expire_time");
+
+
+ return;
+ }
+ }
+
+ log.error("获取appToken失败 {}", jsonObject);
+ throw new AllKingdeeException("获取appToken失败");
+ }
+
+ log.error("获取appToken失败 {}", EntityUtils.toString(response.getEntity(), "utf-8"));
+ throw new AllKingdeeException("获取appToken失败");
+ }
+}
diff --git a/ensign-server/src/main/java/com/ensign/crm/server/utils/RequestConf.java b/ensign-server/src/main/java/com/ensign/crm/server/utils/RequestConf.java
new file mode 100644
index 0000000..aaa53af
--- /dev/null
+++ b/ensign-server/src/main/java/com/ensign/crm/server/utils/RequestConf.java
@@ -0,0 +1,22 @@
+package com.ensign.crm.server.utils;
+
+import org.apache.http.client.config.RequestConfig;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: TODO
+ * @Date: 2024/9/20 18:32
+ * @Created: by ZZSLL
+ */
+
+@Component
+public class RequestConf
+{
+ public static RequestConfig initRequestConfig() {
+ return RequestConfig.custom()
+ .setConnectTimeout(5000)//一、连接超时:connectionTimeout-->指的是连接一个url的连接等待时间
+ .setSocketTimeout(5000)// 二、读取数据超时:SocketTimeout-->指的是连接上一个url,获取response的返回等待时间
+ .setConnectionRequestTimeout(5000)
+ .build();
+ }
+}
diff --git a/ensign-server/src/main/resources/application.yaml b/ensign-server/src/main/resources/application.yaml
index 288c6e8..f6ee5b9 100644
--- a/ensign-server/src/main/resources/application.yaml
+++ b/ensign-server/src/main/resources/application.yaml
@@ -108,7 +108,6 @@ aj:
cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存
timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行
type: blockPuzzle # 验证码类型 default两种都实例化。 blockPuzzle 滑块拼图 clickWord 文字点选
- water-mark: 芋道源码 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode
interference-options: 0 # 滑动干扰项(0/1/2)
req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false
req-get-lock-limit: 5 # 验证失败 5 次,get接口锁定
@@ -197,6 +196,7 @@ ensign:
- /admin-api/pay/notify/** # 支付回调通知,不携带租户编号
- /jmreport/* # 积木报表,无法携带租户编号
- /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,无法携带租户编号
+ - /admin-api/crm/**
ignore-tables:
- system_tenant
- system_tenant_package