From 789b9c402092d0bf836be7f75171c5ff437bdef3 Mon Sep 17 00:00:00 2001 From: zhaochengke Date: Sun, 7 May 2023 15:59:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=90=86=E4=B8=AD=E5=BF=83SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agentcenter-sdk/pom.xml | 107 ++++++++++++++++++ .../java/com/nsgk/agentcentersdk/NSMain.java | 29 +++++ .../com/nsgk/agentcentersdk/api/NSApi.java | 10 ++ .../nsgk/agentcentersdk/api/NSApiResult.java | 30 +++++ .../com/nsgk/agentcentersdk/api/NSSDK.java | 90 +++++++++++++++ .../nsgk/agentcentersdk/api/NSSDKClient.java | 59 ++++++++++ .../nsgk/agentcentersdk/api/NSSDKServer.java | 50 ++++++++ .../nsgk/agentcentersdk/core/NSProtocol.java | 17 +++ .../agentcentersdk/core/NSReportObject.java | 93 +++++++++++++++ .../entity/NSContractionEntity.java | 19 ++++ .../agentcentersdk/entity/NSEntityBase.java | 23 ++++ .../network/NSNetworkManager.java | 34 ++++++ .../network/NSNetworkRequest.java | 25 ++++ .../network/NSNetworkResponse.java | 19 ++++ .../network/NSNetworkTransport.java | 62 ++++++++++ .../nsgk/agentcentersdk/utility/NSArr.java | 14 +++ .../nsgk/agentcentersdk/utility/NSConv.java | 17 +++ .../nsgk/agentcentersdk/utility/NSCrypto.java | 37 ++++++ .../nsgk/agentcentersdk/utility/NSHttp.java | 61 ++++++++++ .../agentcentersdk/utility/NSSignTool.java | 37 ++++++ .../nsgk/agentcentersdk/utility/NSStr.java | 29 +++++ pom.xml | 22 ++++ .../main/java/com/ruoyi/RuoYiApplication.java | 20 ++-- .../agentcenter/AgentCenterController.java | 50 ++++++++ .../src/main/resources/application.yml | 8 ++ ruoyi-agentcenter/pom.xml | 4 + .../agentcenter/listener/TestListener.java | 26 +++++ .../com/ruoyi/common/config/RuoYiConfig.java | 27 +++++ .../java/com/ruoyi/common/object/Message.java | 14 +++ .../ruoyi/common/utils/EventBusEngine.java | 71 ++++++++++++ .../framework/config/EventBusConfig.java | 33 ++++++ .../framework/config/SecurityConfig.java | 2 + 32 files changed, 1130 insertions(+), 9 deletions(-) create mode 100644 agentcenter-sdk/pom.xml create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApi.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApiResult.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDK.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSProtocol.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSReportObject.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSContractionEntity.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkManager.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkRequest.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkResponse.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkTransport.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSArr.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSConv.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSCrypto.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSHttp.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSSignTool.java create mode 100644 agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSStr.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/agentcenter/AgentCenterController.java create mode 100644 ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/TestListener.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/object/Message.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/EventBusEngine.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/EventBusConfig.java diff --git a/agentcenter-sdk/pom.xml b/agentcenter-sdk/pom.xml new file mode 100644 index 0000000..5642c37 --- /dev/null +++ b/agentcenter-sdk/pom.xml @@ -0,0 +1,107 @@ + + + 4.0.0 + + com.nsgk + agentcenter-sdk + 1.0.0nsgk1 + jar + + NS代理中心SDK + + + 1.16.18 + 5.5.4 + 2.0.23 + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + ${project.sourceEncoding} + + + + + + + + + + org.projectlombok + lombok + ${lombok.version} + + + + + cn.hutool + hutool-all + ${hutool.version} + + + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson.version} + + + + + + + org.projectlombok + lombok + + + cn.hutool + hutool-all + + + com.alibaba.fastjson2 + fastjson2 + + + javax.servlet + javax.servlet-api + 4.0.1 + compile + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public + + true + + + false + + + + + \ No newline at end of file diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java new file mode 100644 index 0000000..112e98a --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/NSMain.java @@ -0,0 +1,29 @@ +package com.nsgk.agentcentersdk; + +import com.nsgk.agentcentersdk.api.NSApiResult; +import com.nsgk.agentcentersdk.api.NSSDK; +import com.nsgk.agentcentersdk.api.NSSDKClient; +import com.nsgk.agentcentersdk.core.NSProtocol; +import com.nsgk.agentcentersdk.entity.NSContractionEntity; + +public final class NSMain +{ + public static void main(String[] args) + { + NSSDKClient client; + NSContractionEntity entity; + NSApiResult result; + + NSSDK.InitClient("http://localhost", (short) 8081, "test", "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=="); + client = NSSDK.InstanceClient(); + + entity = new NSContractionEntity(); + entity.setBuildingTime("2000-12-23") + .setName("测试合同") + .setDeptId(187L) + .setBookId(166L) + ; + result = client.Send(NSProtocol.NS_PROTOCOL_CONTRACTION, entity); + System.err.println(result); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApi.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApi.java new file mode 100644 index 0000000..6b4d5c2 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApi.java @@ -0,0 +1,10 @@ +package com.nsgk.agentcentersdk.api; + +// 接口 +public final class NSApi +{ + public static final String NS_API_TEST = "/agentcenter/api/test"; + public static final String NS_API_REPORT = "/agentcenter/api/report"; + + private NSApi() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApiResult.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApiResult.java new file mode 100644 index 0000000..f55a99f --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSApiResult.java @@ -0,0 +1,30 @@ +package com.nsgk.agentcentersdk.api; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import lombok.Data; + +// 服务端返回对象 +@Data +public class NSApiResult +{ + public final int code; + public final String msg; + public final Object data; + public final long timestamp = System.currentTimeMillis(); + + NSApiResult(int code, String msg, Object data) + { + this.code = code; + this.msg = msg; + this.data = data; + } + + static NSApiResult FromJSON(String str) + { + JSONObject jsonObject; + + jsonObject = JSON.parseObject(str); + return new NSApiResult(jsonObject.getInteger("code"), jsonObject.getString("msg"), jsonObject.get("data")); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDK.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDK.java new file mode 100644 index 0000000..9ebc413 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDK.java @@ -0,0 +1,90 @@ +package com.nsgk.agentcentersdk.api; + +import com.nsgk.agentcentersdk.utility.NSConv; + +// SDK全局环境 +public final class NSSDK +{ + // client + private static final ThreadLocal _host = new ThreadLocal<>(); + private static final ThreadLocal _port = new ThreadLocal<>(); + private static final ThreadLocal _identifier = new ThreadLocal<>(); + private static final ThreadLocal _clientInit = new ThreadLocal<>(); + private static final ThreadLocal _publicKey = new ThreadLocal<>(); + + // server + private static final ThreadLocal _privateKey = new ThreadLocal<>(); + private static final ThreadLocal _serverInit = new ThreadLocal<>(); + + public static boolean InitClient(String host, short port, String identifier, String publicKey) + { + if(NSConv.FALSE(_clientInit.get())) + return false; + _host.set(host); + _port.set(port); + _identifier.set(identifier); + _publicKey.set(publicKey); + _clientInit.set(true); + return true; + } + + public static boolean ShutdownClient() + { + if(NSConv.FALSE(_clientInit.get())) + return false; + _host.remove(); + _port.remove(); + _identifier.remove(); + _publicKey.remove(); + _clientInit.set(false); + return true; + } + + public static String Host() + { + return _host.get(); + } + + public static short Port() + { + return _port.get(); + } + + public static String Identifier() + { + return _identifier.get(); + } + + public static NSSDKClient InstanceClient() + { + if(!NSConv.FALSE(_clientInit.get())) + return null; + return new NSSDKClient(_host.get(), _port.get(), _identifier.get(), _publicKey.get()); + } + + + public static boolean InitServer(String privateKey) + { + if(NSConv.FALSE(_serverInit.get())) + return false; + _privateKey.set(privateKey); + _serverInit.set(true); + return true; + } + + public static boolean ShutdownServer() + { + if(NSConv.FALSE(_serverInit.get())) + return false; + _privateKey.remove(); + _serverInit.set(false); + return true; + } + + public static NSSDKServer InstanceServer() + { + if(!NSConv.FALSE(_serverInit.get())) + return null; + return new NSSDKServer(_privateKey.get()); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java new file mode 100644 index 0000000..4aa0ae4 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKClient.java @@ -0,0 +1,59 @@ +package com.nsgk.agentcentersdk.api; + +import cn.hutool.core.util.URLUtil; +import com.nsgk.agentcentersdk.core.NSReportObject; +import com.nsgk.agentcentersdk.entity.NSEntityBase; +import com.nsgk.agentcentersdk.network.NSNetworkManager; +import com.nsgk.agentcentersdk.network.NSNetworkRequest; +import com.nsgk.agentcentersdk.network.NSNetworkResponse; + +// SDK客户端 +/* +请求: + :/?identifier=&protocol=×tamp= + header: sign + body: 加密json +响应: + body: + code: 200 + msg: "" + timestamp: + data: "" // 加密json + */ +public final class NSSDKClient +{ + private final String host; + private final short port; + private final String identifier; + private final String publicKey; + + NSSDKClient(String host, short port, String identifier, String publicKey) + { + this.host = host; + this.port = port; + this.identifier = identifier; + this.publicKey = publicKey; + } + + // 发送请求 + public NSApiResult Send(int protocol, T object) + { + String url; + NSReportObject reportObject; + NSNetworkRequest request; + + url = NSApi.NS_API_REPORT; + reportObject = new NSReportObject<>(identifier, protocol, object); + request = new NSNetworkRequest(); + request.setUrl(BuildUrl(url)); + request.WriteDataObject(reportObject, publicKey); + NSNetworkResponse response = NSNetworkManager.Post(request); + String json = response.getData(); + return NSApiResult.FromJSON(json); + } + + private String BuildUrl(String url) + { + return URLUtil.completeUrl(host + ":" + port, url); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java new file mode 100644 index 0000000..600c8e4 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/api/NSSDKServer.java @@ -0,0 +1,50 @@ +package com.nsgk.agentcentersdk.api; + +import com.nsgk.agentcentersdk.core.NSReportObject; +import com.nsgk.agentcentersdk.entity.NSEntityBase; +import com.nsgk.agentcentersdk.utility.NSArr; +import com.nsgk.agentcentersdk.utility.NSCrypto; +import com.nsgk.agentcentersdk.utility.NSHttp; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +// SDK服务端 +public final class NSSDKServer +{ + private final String privateKey; + + public NSSDKServer(String privateKey) + { + this.privateKey = privateKey; + } + + // 解析请求 + public NSReportObject Recv(HttpServletRequest request, Class clazz) + { + NSReportObject res; + String sign; + String data; + + sign = request.getHeader("sign"); + data = NSHttp.GetRequestBody(request); + res = new NSReportObject<>(); + res.SetTimestampStr(request.getParameter("timestamp")) + .setIdentifier(request.getParameter("identifier")) + .SetProtocolStr(request.getParameter("protocol")) + .SetDataStr(NSCrypto.RSADecrypt(data, privateKey), clazz) + ; + if(!res.CheckSign(sign)) + { + return null; + } + res.setSign(sign); + return res; + } + + // 响应客户端 + public NSApiResult Resp(int code, String msg, Object...data) + { + return new NSApiResult(code, msg, NSArr.DefParms(data)); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSProtocol.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSProtocol.java new file mode 100644 index 0000000..40be408 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSProtocol.java @@ -0,0 +1,17 @@ +package com.nsgk.agentcentersdk.core; + +// 协议常量 +public final class NSProtocol +{ + public static final int NS_PROTOCOL_INVALID = 0; + public static final int NS_PROTOCOL_TEST = 0x00001; + public static final int NS_PROTOCOL_CONTRACTION = 0x10001; + + public static int FromString(String str) + { + int i = Integer.parseInt(str); + return Math.abs(i); + } + + private NSProtocol() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSReportObject.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSReportObject.java new file mode 100644 index 0000000..4d080fd --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/core/NSReportObject.java @@ -0,0 +1,93 @@ +package com.nsgk.agentcentersdk.core; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSON; +import com.nsgk.agentcentersdk.utility.NSSignTool; +import com.nsgk.agentcentersdk.utility.NSStr; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Map; + +// 封装对象 +@Data +@Accessors(chain = true) +public class NSReportObject +{ + protected static final String[] SIGN_FIELDS = { + "identifier", "protocol", "timestamp", "dataLength", + }; + private String identifier; // 识别ID + private String sign; // 签名 + private int protocol = NSProtocol.NS_PROTOCOL_INVALID; // 协议 + private Long timestamp; // 客户端时间戳 + private T data; + private String dataStr = ""; + + public NSReportObject setData(T d) + { + data = d; + dataStr = ""; + if(null != data) + dataStr = JSON.toJSONString(data); + return this; + } + + public NSReportObject SetDataStr(String str, Class clazz) + { + data = JSON.parseObject(str, clazz); + dataStr = str; + return this; + } + + public NSReportObject() + { + } + + public NSReportObject(String identifier, int protocol) + { + this(identifier, protocol, null); + } + + public NSReportObject(String identifier, int protocol, T data) + { + this.identifier = identifier; + this.protocol = protocol; + timestamp = System.currentTimeMillis(); + setData(data); + sign = Sign(); + } + + public boolean IsValid() + { + return NSStr.IsNotEmpty(identifier) && null != timestamp && protocol > 0; + } + + public String Sign() + { + Map map; + + map = BeanUtil.beanToMap(this); + map.put("dataLength", NSStr.Length(dataStr)); + return NSSignTool.Sign(map, SIGN_FIELDS); + } + + public boolean CheckSign(String src) + { + if(!IsValid()) + return false; + return src.equals(Sign()); + } + + public NSReportObject SetTimestampStr(String str) + { + timestamp = Long.parseLong(str); + return this; + } + + public NSReportObject SetProtocolStr(String str) + { + protocol = NSProtocol.FromString(str); + return this; + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSContractionEntity.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSContractionEntity.java new file mode 100644 index 0000000..5533be8 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSContractionEntity.java @@ -0,0 +1,19 @@ +package com.nsgk.agentcentersdk.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +// 合同实体 +@Data +@Accessors(chain = true) +public class NSContractionEntity extends NSEntityBase +{ + private static final long serialVersionUID = 1L; + + /** 合同名称 */ + private String name; + + /** 签订日期 */ + private String buildingTime; + +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java new file mode 100644 index 0000000..1c61528 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/entity/NSEntityBase.java @@ -0,0 +1,23 @@ +package com.nsgk.agentcentersdk.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +// 基本实体 +@Data +@Accessors(chain = true) +public abstract class NSEntityBase implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 账套ID */ + protected Long bookId; + + /** 部门id */ + protected Long deptId; + + /** 外部ID */ + private Long outId; +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkManager.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkManager.java new file mode 100644 index 0000000..5d61045 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkManager.java @@ -0,0 +1,34 @@ +package com.nsgk.agentcentersdk.network; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.hutool.http.Method; +import com.nsgk.agentcentersdk.utility.NSHttp; + +// Http网络 +public final class NSNetworkManager +{ + public static NSNetworkResponse Post(NSNetworkRequest req) + { + HttpRequest network; + HttpResponse execute; + NSNetworkResponse response; + + network = CreateRequest(NSHttp.BuildUrl(req.getUrl(), req.getQuery()), "post"); + req.getHeaders().forEach(network::header); + network.body(req.getData()); + execute = network.execute(); + response = new NSNetworkResponse(); + response.setData(execute.body()); + response.setUrl(req.getUrl()); + execute.headers().forEach(response::AddHeader); + response.setStatusCode(execute.getStatus()); + return response; + } + + private static HttpRequest CreateRequest(String url, String method) + { + return HttpUtil.createRequest(Method.valueOf(method.toUpperCase()), url); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkRequest.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkRequest.java new file mode 100644 index 0000000..79c07f8 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkRequest.java @@ -0,0 +1,25 @@ +package com.nsgk.agentcentersdk.network; + +import com.nsgk.agentcentersdk.core.NSReportObject; +import com.nsgk.agentcentersdk.utility.NSCrypto; +import lombok.Data; +import lombok.experimental.Accessors; + +// Http请求 +@Data +@Accessors(chain = true) +public class NSNetworkRequest extends NSNetworkTransport +{ + public void WriteDataObject(NSReportObject object, String publicKey) + { + String dataStr; + + ClearHeaders().AddHeader("sign", object.getSign()); + ClearQueries().AddQuery("identifier", object.getIdentifier()) + .AddQuery("protocol", object.getProtocol()) + .AddQuery("timestamp", object.getTimestamp()) + ; + dataStr = object.getDataStr(); + setData(NSCrypto.RSAEncrypt(dataStr, publicKey)); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkResponse.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkResponse.java new file mode 100644 index 0000000..040ef08 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkResponse.java @@ -0,0 +1,19 @@ +package com.nsgk.agentcentersdk.network; + +import cn.hutool.http.HttpStatus; +import com.nsgk.agentcentersdk.core.NSReportObject; +import lombok.Data; +import lombok.experimental.Accessors; + +// Http响应 +@Data +@Accessors(chain = true) +public class NSNetworkResponse extends NSNetworkTransport +{ + private Integer statusCode; + + public boolean IsSuccess() + { + return null != statusCode && statusCode == HttpStatus.HTTP_OK; + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkTransport.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkTransport.java new file mode 100644 index 0000000..420adfc --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/network/NSNetworkTransport.java @@ -0,0 +1,62 @@ +package com.nsgk.agentcentersdk.network; + +import com.nsgk.agentcentersdk.utility.NSArr; +import com.nsgk.agentcentersdk.utility.NSStr; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +// Http传输 +@Data +@Accessors(chain = true) +public class NSNetworkTransport +{ + private String url; + private final Map headers = new LinkedHashMap<>(); + private final Map query = new LinkedHashMap<>(); + private String data; + + public NSNetworkTransport() {} + + public NSNetworkTransport(String url) + { + this.url = url; + } + + public NSNetworkTransport ClearHeaders() + { + headers.clear(); + return this; + } + + public NSNetworkTransport AddHeader(String name, Object value) + { + headers.put(name, NSStr.ToString(value)); + return this; + } + + public String Header(String name, String...value) + { + return headers.getOrDefault(name, NSArr.DefParms(value)); + } + + public NSNetworkTransport ClearQueries() + { + query.clear(); + return this; + } + + public NSNetworkTransport AddQuery(String name, Object value) + { + query.put(name, value); + return this; + } + + public Object Query(String name, Object...value) + { + return query.getOrDefault(name, NSArr.DefParms(value)); + } +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSArr.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSArr.java new file mode 100644 index 0000000..4ee0415 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSArr.java @@ -0,0 +1,14 @@ +package com.nsgk.agentcentersdk.utility; + +// 数组工具 +public final class NSArr +{ + public static T DefParms(T...args) + { + if(null == args || args.length == 0) + return null; + return args[0]; + } + + private NSArr() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSConv.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSConv.java new file mode 100644 index 0000000..ce012ba --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSConv.java @@ -0,0 +1,17 @@ +package com.nsgk.agentcentersdk.utility; + +// 转换工具 +public final class NSConv +{ + public static boolean FALSE(Boolean b) + { + return null != b ? b : false; + } + + public static boolean TRUE(Boolean b) + { + return null != b ? b : true; + } + + private NSConv() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSCrypto.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSCrypto.java new file mode 100644 index 0000000..ba63146 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSCrypto.java @@ -0,0 +1,37 @@ +package com.nsgk.agentcentersdk.utility; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; + +import java.nio.charset.StandardCharsets; + +// 加密工具 +public final class NSCrypto +{ + // RSA公钥加密(客户端) raw -> base64 + public static String RSAEncrypt(String rawData, String publicKey_base64) + { + RSA rsa; + + if(NSStr.IsEmpty(rawData) || NSStr.IsEmpty(publicKey_base64)) + return ""; + rsa = SecureUtil.rsa(null, publicKey_base64); + return rsa.encryptBase64(rawData, KeyType.PublicKey); + } + + // RSA私钥解密(服务端) base64 -> raw + public static String RSADecrypt(String encryptBase64Data, String privateKey_base64) + { + RSA rsa; + + if(NSStr.IsEmpty(encryptBase64Data) || NSStr.IsEmpty(privateKey_base64)) + return ""; + rsa = SecureUtil.rsa(privateKey_base64, null); + return StrUtil.str(rsa.decrypt(Base64.decode(encryptBase64Data), KeyType.PrivateKey), StandardCharsets.UTF_8); + } + + private NSCrypto() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSHttp.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSHttp.java new file mode 100644 index 0000000..0ccb558 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSHttp.java @@ -0,0 +1,61 @@ +package com.nsgk.agentcentersdk.utility; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.net.url.UrlQuery; +import cn.hutool.core.util.URLUtil; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.Map; + +// Http工具 +public final class NSHttp +{ + public static Map ParseQuery(String str) + { + Map map; + Map queryMap; + + map = new LinkedHashMap<>(); + if(NSStr.IsEmpty(str)) + return map; + + queryMap = UrlQuery.of(str, StandardCharsets.UTF_8).getQueryMap(); + queryMap.forEach((k, v) -> map.put(k.toString(), NSStr.ToString(v))); + return map; + } + + public static String GetRequestBody(HttpServletRequest request) + { + ServletInputStream reader; + + reader = null; + try + { + reader = request.getInputStream(); + return IoUtil.read(reader, StandardCharsets.UTF_8); + } + catch(Exception e) + { + e.printStackTrace(); + return ""; + } + finally + { + IoUtil.close(reader); + } + } + + public static String BuildUrl(String url, Map query) + { + if(CollectionUtil.isEmpty(query)) + return url; + return url + "?" + URLUtil.buildQuery(query, StandardCharsets.UTF_8); + } + + private NSHttp() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSSignTool.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSSignTool.java new file mode 100644 index 0000000..3b4b3a0 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSSignTool.java @@ -0,0 +1,37 @@ +package com.nsgk.agentcentersdk.utility; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.crypto.SecureUtil; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +// 签名工具 +public final class NSSignTool +{ + public static String Sign(Object object, String...signFields) + { + return Sign(BeanUtil.beanToMap(object), signFields); + } + + public static String Sign(Map map, String...signFields) + { + List fields; + StringBuilder sb; + + fields = Arrays.stream(signFields).sorted(String::compareTo).collect(Collectors.toList()); + sb = new StringBuilder(); + for(int i = 0; i < fields.size(); i++) + {//dataLength=69&identifier=test&protocol=1×tamp=1683442648774 + if(i > 0) + sb.append("&"); + String key = fields.get(i); + sb.append(fields.get(i)).append("=").append(map.getOrDefault(key, "")); + } + return SecureUtil.md5(sb.toString()); + } + + private NSSignTool() {} +} diff --git a/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSStr.java b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSStr.java new file mode 100644 index 0000000..c6e83d4 --- /dev/null +++ b/agentcenter-sdk/src/main/java/com/nsgk/agentcentersdk/utility/NSStr.java @@ -0,0 +1,29 @@ +package com.nsgk.agentcentersdk.utility; + +// 字符串工具 +public final class NSStr +{ + public static boolean IsEmpty(String str) + { + if(null == str || str.isEmpty()) + return true; + return str.trim().isEmpty(); + } + + public static boolean IsNotEmpty(String str) + { + return !IsEmpty(str); + } + + public static String ToString(Object obj) + { + return null != obj ? obj.toString() : ""; + } + + public static int Length(String str) + { + return null != str ? str.length() : 0; + } + + private NSStr() {} +} diff --git a/pom.xml b/pom.xml index 959b969..d940d59 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,8 @@ 1.16.18 5.5.4 + 31.1-jre + 1.0.0nsgk1 @@ -194,6 +196,18 @@ ${ruoyi.version} + + com.google.guava + guava + ${guava.version} + + + + com.nsgk + agentcenter-sdk + ${agentcentersdk.version} + + @@ -218,6 +232,14 @@ cn.hutool hutool-all + + com.google.guava + guava + + + com.nsgk + agentcenter-sdk + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 32eb6f1..5ff3adb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -17,14 +17,16 @@ public class RuoYiApplication // System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(RuoYiApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + - " .-------. ____ __ \n" + - " | _ _ \\ \\ \\ / / \n" + - " | ( ' ) | \\ _. / ' \n" + - " |(_ o _) / _( )_ .' \n" + - " | (_,_).' __ ___(_ o _)' \n" + - " | |\\ \\ | || |(_,_)' \n" + - " | | \\ `' /| `-' / \n" + - " | | \\ / \\ / \n" + - " ''-' `'-' `-..-' "); + "\n" + + "__/\\\\\\\\\\_____/\\\\\\______________/\\\\\\\\\\\\\\\\\\\\\\________________/\\\\\\\\\\\\\\\\\\\\\\\\___________/\\\\\\________/\\\\\\_ \n" + + " _\\/\\\\\\\\\\\\___\\/\\\\\\____________/\\\\\\/////////\\\\\\____________/\\\\\\//////////___________\\/\\\\\\_____/\\\\\\//__ \n" + + " _\\/\\\\\\/\\\\\\__\\/\\\\\\___________\\//\\\\\\______\\///____________/\\\\\\______________________\\/\\\\\\__/\\\\\\//_____ \n" + + " _\\/\\\\\\//\\\\\\_\\/\\\\\\____________\\////\\\\\\__________________\\/\\\\\\____/\\\\\\\\\\\\\\__________\\/\\\\\\\\\\\\//\\\\\\_____ \n" + + " _\\/\\\\\\\\//\\\\\\\\/\\\\\\_______________\\////\\\\\\_______________\\/\\\\\\___\\/////\\\\\\__________\\/\\\\\\//_\\//\\\\\\____ \n" + + " _\\/\\\\\\_\\//\\\\\\/\\\\\\__________________\\////\\\\\\____________\\/\\\\\\_______\\/\\\\\\__________\\/\\\\\\____\\//\\\\\\___ \n" + + " _\\/\\\\\\__\\//\\\\\\\\\\\\___________/\\\\\\______\\//\\\\\\___________\\/\\\\\\_______\\/\\\\\\__________\\/\\\\\\_____\\//\\\\\\__ \n" + + " _\\/\\\\\\___\\//\\\\\\\\\\__________\\///\\\\\\\\\\\\\\\\\\\\\\/____________\\//\\\\\\\\\\\\\\\\\\\\\\\\/___________\\/\\\\\\______\\//\\\\\\_ \n" + + " _\\///_____\\/////_____________\\///////////_______________\\////////////_____________\\///________\\///__\n" + ); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/agentcenter/AgentCenterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/agentcenter/AgentCenterController.java new file mode 100644 index 0000000..09d4624 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/agentcenter/AgentCenterController.java @@ -0,0 +1,50 @@ +package com.ruoyi.web.controller.agentcenter; + +import com.nsgk.agentcentersdk.api.NSApiResult; +import com.nsgk.agentcentersdk.api.NSSDK; +import com.nsgk.agentcentersdk.api.NSSDKServer; +import com.nsgk.agentcentersdk.core.NSReportObject; +import com.nsgk.agentcentersdk.entity.NSContractionEntity; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.core.controller.BaseController; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +/** + * 上报接口Controller + * + * @author zhao + */ +@RestController +@RequestMapping("/agentcenter/api") +public class AgentCenterController extends BaseController +{ + @PostMapping("/test") + public NSApiResult test(HttpServletRequest request) + { + NSSDKServer server; + NSReportObject recv; + + NSSDK.InitServer(RuoYiConfig.Secret.privateKey); + server = NSSDK.InstanceServer(); + recv = server.Recv(request, NSContractionEntity.class); + + return server.Resp(200, "测试成功", recv.getDataStr()); + } + + @PostMapping("/report") + public NSApiResult report(HttpServletRequest request) + { + NSSDKServer server; + NSReportObject recv; + + NSSDK.InitServer(RuoYiConfig.Secret.privateKey); + server = NSSDK.InstanceServer(); + recv = server.Recv(request, NSContractionEntity.class); + + return server.Resp(200, "上报成功", recv.getDataStr()); + } +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 411383f..9b6bd2c 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -129,3 +129,11 @@ xss: excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* + + +secret: + disabled: false # UNUSED + # 客户端公钥 + publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ== + # 服务端私钥 + privateKey: MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y= \ No newline at end of file diff --git a/ruoyi-agentcenter/pom.xml b/ruoyi-agentcenter/pom.xml index c86d850..429385a 100644 --- a/ruoyi-agentcenter/pom.xml +++ b/ruoyi-agentcenter/pom.xml @@ -22,6 +22,10 @@ com.ruoyi ruoyi-common + + com.ruoyi + ruoyi-common + diff --git a/ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/TestListener.java b/ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/TestListener.java new file mode 100644 index 0000000..7fa25a3 --- /dev/null +++ b/ruoyi-agentcenter/src/main/java/com/ruoyi/agentcenter/listener/TestListener.java @@ -0,0 +1,26 @@ +package com.ruoyi.agentcenter.listener; + +import com.google.common.eventbus.AllowConcurrentEvents; +import com.google.common.eventbus.Subscribe; +import com.ruoyi.common.object.Message; +import com.ruoyi.common.utils.EventBusEngine; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class TestListener +{ + @PostConstruct + public void init() + { + EventBusEngine.Register(this); + } + + @Subscribe + //@AllowConcurrentEvents + public void handle(Message msg) + { + System.err.println("LLL " + msg.data + " " + Thread.currentThread().getId()); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java index 00f70f6..af36816 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -3,6 +3,8 @@ package com.ruoyi.common.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; +import java.nio.charset.StandardCharsets; + /** * 读取项目相关配置 * @@ -132,4 +134,29 @@ public class RuoYiConfig { return getProfile() + "/upload"; } + + + @Component + @ConfigurationProperties(prefix = "secret") + public static class Secret { + public static Boolean disabled; + public static String publicKey; + public static String privateKey; + + public void setDisabled(Boolean disabled) { + Secret.disabled = disabled; + } + + public void setPublicKey(String publicKey) { + Secret.publicKey = publicKey; + } + + public void setPrivateKey(String privateKey) { + Secret.privateKey = privateKey; + } + + public static boolean isDisabled() { + return null != Secret.disabled /*默认加密*/ && Secret.disabled; + } + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/object/Message.java b/ruoyi-common/src/main/java/com/ruoyi/common/object/Message.java new file mode 100644 index 0000000..3654714 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/object/Message.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.object; + +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public final class Message +{ + public static final int PROTOCOL_INVALID = 0; + + public int protocol = PROTOCOL_INVALID; + public Object data; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/EventBusEngine.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EventBusEngine.java new file mode 100644 index 0000000..77e33bb --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/EventBusEngine.java @@ -0,0 +1,71 @@ +package com.ruoyi.common.utils; + +import com.google.common.eventbus.EventBus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; +import java.util.ArrayList; +import java.util.List; + +@Component +public final class EventBusEngine +{ + private static final Logger logger = LoggerFactory.getLogger("EventBusEngine" ); + private static EventBus _eventBus; + private static final List _listenerList = new ArrayList<>(); + + @Autowired + public void setAsyncEventBus(@Qualifier("asyncEventBus" ) EventBus eventBus) + { + EventBusEngine._eventBus = eventBus; + logger.info("EventBusEngine::initialization -> " + eventBus); + } + + public static void Post(Object message) + { + _eventBus.post(message); + } + + public static void Register(Object listener) + { + if(null == listener) + return; + synchronized(_listenerList) { + if(_listenerList.contains(listener)) + return; + _eventBus.register(listener); + _listenerList.add(listener); + logger.info("EventBusEngine::Register -> " + listener); + } + } + + public static void Unregister(Object listener) + { + if(null == listener) + return; + synchronized(_listenerList) { + if(!_listenerList.contains(listener)) + return; + _eventBus.unregister(listener); + _listenerList.remove(listener); + logger.info("EventBusEngine::Unregister -> " + listener); + } + } + + @PreDestroy + public static void UnregisterAll() + { + synchronized(_listenerList) { + logger.info("EventBusEngine::UnregisterAll -> " + _listenerList.size()); + if(!_listenerList.isEmpty()) + { + _listenerList.forEach(_eventBus::unregister); + _listenerList.clear(); + } + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/EventBusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/EventBusConfig.java new file mode 100644 index 0000000..b3fdd0a --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/EventBusConfig.java @@ -0,0 +1,33 @@ +package com.ruoyi.framework.config; + +import com.google.common.eventbus.AsyncEventBus; +import com.google.common.eventbus.EventBus; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Component; + +/** + * EventBus配置 + * + * @author zhao + */ +@Component +public class EventBusConfig +{ + @Bean("asyncEventBus") + @Lazy(value = true) + public EventBus asyncEventBus(@Qualifier("threadPoolTaskExecutor" ) ThreadPoolTaskExecutor threadPool) + { + return new AsyncEventBus("AsyncReportQueue", threadPool); + } + + @Bean("syncEventBus") + @Lazy(value = true) + public EventBus syncEventBus() + { + return new EventBus("SyncReportQueue"); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index 2125853..ba6c444 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -115,6 +115,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() + // 外部上报通道 + .antMatchers("/agentcenter/api/**").permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated() .and()