diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index d1e594f22..20ec40bac 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -119,6 +119,14 @@ gson 2.11.0 + + + + + p6spy + p6spy + 3.9.1 + diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/common/config/BjCaConfig.java b/ruoyi-admin/src/main/java/com/neuhis/his/common/config/BjCaConfig.java index ee194dd24..21f9a5d72 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/common/config/BjCaConfig.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/common/config/BjCaConfig.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; /** * 北京CA配置 @@ -13,6 +14,7 @@ import org.springframework.context.annotation.Configuration; **/ @Configuration @ConfigurationProperties(prefix = "nhit.dc.ca.bjxt01") +@PropertySource(value = { "classpath:bjca.properties" }) @Getter @Setter public class BjCaConfig { @@ -40,6 +42,11 @@ public class BjCaConfig { * nhit.dc.ca.bjxt01.app-secret=MDAwNjY1MTZmMjczNDk4MDk2MzJhMTQ4OWYyZTdlNGE= * */ + private String serverBase; + private String appId; + private String appSecret; + private String userId; + private String serverQueryUserInfo; private String serverStartAuthSign; private String serverGetSignResult; @@ -48,6 +55,4 @@ public class BjCaConfig { private String serverQueryImage; private String serverTssInfo; private String serverVerifyTss; - private String appId; - private String appSecret; } diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/common/config/P6SPYConfig.java b/ruoyi-admin/src/main/java/com/neuhis/his/common/config/P6SPYConfig.java new file mode 100644 index 000000000..b416a54dc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/neuhis/his/common/config/P6SPYConfig.java @@ -0,0 +1,26 @@ +package com.neuhis.his.common.config; + +import com.alibaba.fastjson.JSONObject; +import com.p6spy.engine.spy.appender.MessageFormattingStrategy; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * P6Spy有内置的SQL输出格式,如上配置文件。这里我们使用自定义SQL日志打印 + * + * @author dazer + * @date 2025/3/5 14:46 + **/ +public class P6SPYConfig implements MessageFormattingStrategy { + @Override + public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) { + Map message = new LinkedHashMap<>(8); + String newPrepared = prepared.replace(" ", "").replace("\n", " "); + message.put("prepared", newPrepared); + String newSql = sql.replace(" ", "").replace("\n", " "); + message.put("sql", newSql); + return JSONObject.toJSONString(message, true); + } + +} diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/controller/BizApiController.java b/ruoyi-admin/src/main/java/com/neuhis/his/controller/BizApiController.java index 387242f91..e2ac8fe73 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/controller/BizApiController.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/controller/BizApiController.java @@ -1,6 +1,8 @@ package com.neuhis.his.controller; import java.util.List; + +import com.p6spy.engine.spy.P6ModuleManager; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/IBjCaService.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/IBjCaService.java index 970bc2183..c432a371c 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/IBjCaService.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/IBjCaService.java @@ -3,7 +3,7 @@ package com.neuhis.his.service; /** *
  * 北京CA自动签名,用于补历史签名数据
- * 接口1 3.4.3.1 开启自动签(startAutoSign)   需要用户扫码,扫码后的字段放到哪个字段里面?
+ * 接口1 3.4.3.1 开启自动签(startAutoSign)   开启自动签,会返回一二维码,需要用户扫描确认,扫码一会管一段时间,使用app: 应用市场[协同签名]
  * 接口2 3.4.3.3 自动签名(autoSign)的反参这二个数据存库signResult签名结果,signCert签名证书,
  * 接口3 3.4.7.1 产生时间戳(createAndGetTssInfo)  第三个接口的时间戳结果:入参:oriData,这个是啥字段? 数据原文和自动签名接口里面传的数据原文保持一致就行
  * 
diff --git a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java index 8536a0185..59486f7f2 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/neuhis/his/service/impl/BjCaServiceImpl.java @@ -28,17 +28,17 @@ import java.util.Map; public class BjCaServiceImpl implements IBjCaService { @Autowired private BjCaConfig bjCaConfig; - /** - * 北京CA协同平台的USER_ID - */ - private final String USER_ID = "XXX"; + /** + * 通过 https://demo-system.isignet.cn/signHelper/sign.html 校验签名值是否正确 + * @return + */ @Override public String startAutoSign() { Map params = getBjCaCommonParams(); - params.put("userId", USER_ID);//用户 Id + params.put("userId", bjCaConfig.getUserId());//用户 Id,医生的CA系统协同用户iD params.put("timeRegion", " 86400");//自动签名的过期时间,单位为秒(默认最长 86400秒,即 24 小时,也可以通过管理端系统重新设置) - params.put("requireQrCode", "N");//是否返回二维码(只能传入 Y、N 两种类型,如果 传 Y,会将二维码图片 base64 编码后返回) + params.put("requireQrCode", "Y");//是否返回二维码(只能传入 Y、N 两种类型,如果 传 Y,会将二维码图片 base64 编码后返回) BjCaResult result = postBjCa(bjCaConfig.getServerStartAuthSign(), params); if (result.isSuccess()) { return result.getData().getSignDataId(); @@ -49,7 +49,7 @@ public class BjCaServiceImpl implements IBjCaService { @Override public void autoSign(String signDataId, String oriDataBase64) { Map params = getBjCaCommonParams(); - params.put("userId", USER_ID);//用户 Id + params.put("userId", bjCaConfig.getUserId());//用户 Id,用户 Id,医生的CA系统协同用户iD params.put("dataType", "DATA");//原文类型(DATA:原文,HASH:hash 数据WEB_SEAL:网页签章) params.put("algo", "SM3withSM2");//签名算法(SM3withSM2) params.put("data", oriDataBase64);//待签数据(必须是 base64编码) @@ -73,7 +73,7 @@ public class BjCaServiceImpl implements IBjCaService { BjCaResult bjCaResult = new BjCaResult<>(); try { requestJson = BjcaUtil.RequestUtils.generateRequestJson(params, bjCaConfig.getAppSecret()); - result = BjcaUtil.HTTPUtils.post(bjCaConfig.getServerStartAuthSign(), requestJson); + result = BjcaUtil.HTTPUtils.post(bjCaConfig.getServerBase() + bjCaConfig.getServerStartAuthSign(), requestJson); bjCaResult = JSON.parseObject(result, BjCaResult.class); } catch (Exception e) { result = "请求CA报错:" + e.getMessage(); diff --git a/ruoyi-admin/src/main/java/com/neuhis/utils/BjcaUtil.java b/ruoyi-admin/src/main/java/com/neuhis/utils/BjcaUtil.java index 0ceedf5df..b1ac5b1de 100644 --- a/ruoyi-admin/src/main/java/com/neuhis/utils/BjcaUtil.java +++ b/ruoyi-admin/src/main/java/com/neuhis/utils/BjcaUtil.java @@ -3,6 +3,7 @@ package com.neuhis.utils; import cn.hutool.core.codec.Base64; import com.alibaba.fastjson.JSON; import com.google.gson.GsonBuilder; +import lombok.extern.slf4j.Slf4j; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; @@ -16,10 +17,11 @@ import java.util.*; /** * 北京CA签名、加密相关工具类 - * + * 北京CA测试,在线签名工具:https://demo-system.isignet.cn/signHelper/sign.html * @author dazer * @date 2025/3/3 19:07 **/ +@Slf4j public class BjcaUtil { public static class RequestUtils { @@ -29,7 +31,7 @@ public class BjcaUtil { public static String generateRequestJson(Map request, String key) throws Exception { String jsonData = JSON.toJSONString(request); String data = generateSignString(request); - System.out.println("hashData>>>>>"+data); + System.out.println("hashData>>>>>:"+data); String signature; signature = getHMAC(data.getBytes(), key.getBytes(), "HmacSHA256");//签名方式名称不能修改 diff --git a/ruoyi-admin/src/main/resources/application.properties b/ruoyi-admin/src/main/resources/application.properties index 2b0fea534..a801d1d2c 100644 --- a/ruoyi-admin/src/main/resources/application.properties +++ b/ruoyi-admin/src/main/resources/application.properties @@ -1,29 +1,2 @@ -# \u5317\u4EACCA -# CA\u670D\u52A1\u5730\u5740 -nhit.dc.ca.bjxt01.server-query-user-info=http://192.168.216.112:10201/coss/service/v1/queryUserInfo -# \u5F00\u542F\u81EA\u52A8\u7B7E\u540D -nhit.dc.ca.bjxt01.server-start-auth-sign=http://192.168.216.112:10201/coss/service/v1/startAutoSign -# \u83B7\u53D6\u7B7E\u540D\u7ED3\u679C -nhit.dc.ca.bjxt01.server-get-sign-result=http://192.168.216.112:10201/coss/service/v1/getSignResult -# \u81EA\u52A8\u7B7E\u540D -nhit.dc.ca.bjxt01.server-auth-sign=http://192.168.216.112:10201/coss/service/v1/autoSign -# \u9A8C\u8BC1\u6570\u636E\u7B7E\u540D -nhit.dc.ca.bjxt01.server-verify-sign=http://192.168.216.112:10201/coss/service/v1/verifySign -# \u83B7\u53D6\u5370\u7AE0\u56FE\u7247 -nhit.dc.ca.bjxt01.server-query-image=http://192.168.216.112:10201/coss/service/v1/queryImage -# \u65F6\u95F4\u6233\u7B7E\u540D -nhit.dc.ca.bjxt01.server-tss-info=http://192.168.216.112:10201/coss/service/v1/createAndGetTssInfo -# \u9A8C\u8BC1\u65F6\u95F4\u6233\u7B7E\u540D -nhit.dc.ca.bjxt01.server-verify-tss=http://192.168.216.112:10201/coss/service/v1/verifyTS -### \u54B8\u9633\u624B\u9EBB -# \u7B2C\u4E09\u65B9\u8D26\u53F7\u6807\u8BC6 -nhit.dc.ca.bjxt01.app-id=APP_3FAE577489B649F78F70C861AA991AEE -# \u7B2C\u4E09\u65B9\u8D26\u53F7\u79D8\u94A5 -nhit.dc.ca.bjxt01.app-secret=MDAwNjY1MTZmMjczNDk4MDk2MzJhMTQ4OWYyZTdlNGE= - -### \u54B8\u9633\u75C5\u5386 -#nhit.dc.ca.bjxt01.app-id=APP_95BF9D123FCF498A83C344ED42473675 -#nhit.dc.ca.bjxt01.app-secret=MzI1ODNlYTI2ZjkwNDkzZjg3MDhjOTMwMDBlZDYwOTQ= - #\u5FC5\u73B0\u589E\u52A0\u8BE5\u6761\u76EE\uFF0C\u5426\u5219 springboot 2.7 \u96C6\u6210\uFF0Cswagger\u52A0\u8F7D\u4E0D\u5230\uFF0C\u63D0\u793A\uFF1ANo operations defined in spec! spring.mvc.pathmatch.matching-strategy=ant_path_matcher diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index f824db1b9..5d72bb482 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -59,7 +59,7 @@ spring: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss profiles: - active: xyzxhis #druid、xyzxhis + active: xyzxhis,bjca #druid、xyzxhis # 文件上传 servlet: multipart: @@ -141,3 +141,9 @@ xss: swagger: # 是否开启swagger enabled: true + + +# p6spy sql打印 +decorator: + datasource: + enabled: true # 是否启用 diff --git a/ruoyi-admin/src/main/resources/bjca.properties b/ruoyi-admin/src/main/resources/bjca.properties new file mode 100644 index 000000000..d26fcddf1 --- /dev/null +++ b/ruoyi-admin/src/main/resources/bjca.properties @@ -0,0 +1,41 @@ +# \u5317\u4EACCA +# CA\u670D\u52A1\u5730\u5740 +nhit.dc.ca.bjxt01.server-base:http://192.168.216.112:10201/coss +#nhit.dc.ca.bjxt01.server-base:http://61.134.26.120:10201/coss #\u5916\u7F51\u5730\u5740 +#\u5317\u4EACCA\u534F\u540C\u5E73\u53F0\u7684USER_ID, \u5B59\u9759 \u68C0\u9A8C\u79D1 000616 +#\u5237\u6570\u636E\uFF0C\u4F7F\u7528\u56FA\u5B9A\u4E00\u4E2A\u533B\u5E08\u7684user_id +nhit.dc.ca.bjxt01.user_id:2122e89265cc291a00f8d20800bfd24c0f7f72db9225cb69a208dc7183ac2849 +## \u5237\u6570\u636E\uFF0C\u4E3B\u8981\u8C03\u7528\u63A5\u53E3\uFF1A +###1\u3001 \u5F00\u542F\u81EA\u52A8\u7B7E(startAutoSign)\uFF0C\u8FD4\u56DE\u7B7E\u540D\u4E8C\u7EF4\u7801\uFF0C\u4F7F\u7528\u3010\u534F\u540C\u7B7E\u540D\u3011\u6709CA\u7684\u7528\u6237\u626B\u63CF\uFF0C\u626B\u63CF\u540E\u53EF\u6301\u7EED\u4E00\u6BB5\u65F6\u95F4 +###2\u3001 \u81EA\u52A8\u7B7E\u540D(autoSign)\u7684\u53CD\u53C2\u8FD9\u4E8C\u4E2A\u6570\u636E\u5B58\u5E93signResult\u7B7E\u540D\u7ED3\u679C\uFF0CsignCert\u7B7E\u540D\u8BC1\u4E66\uFF0C +###3\u3001 \u4EA7\u751F\u65F6\u95F4\u6233(createAndGetTssInfo) \u7B2C\u4E09\u4E2A\u63A5\u53E3\u8FD4\u56DE\u65F6\u95F4\u6233\u7ED3\u679C\uFF1A\u5165\u53C2\uFF1AoriData\uFF1A \u6570\u636E\u539F\u6587\u548C\u81EA\u52A8\u7B7E\u540D\u63A5\u53E3\u91CC\u9762\u4F20\u7684\u6570\u636E\u539F\u6587\u4FDD\u6301\u4E00\u81F4\u5C31\u884C + + + +### \u54B8\u9633\u624B\u9EBB +# \u7B2C\u4E09\u65B9\u8D26\u53F7\u6807\u8BC6 +#nhit.dc.ca.bjxt01.app-id=APP_3FAE577489B649F78F70C861AA991AEE +# \u7B2C\u4E09\u65B9\u8D26\u53F7\u79D8\u94A5 +#nhit.dc.ca.bjxt01.app-secret=MDAwNjY1MTZmMjczNDk4MDk2MzJhMTQ4OWYyZTdlNGE= + +### \u54B8\u9633\u75C5\u5386 +nhit.dc.ca.bjxt01.app-id=APP_95BF9D123FCF498A83C344ED42473675 +nhit.dc.ca.bjxt01.app-secret=MzI1ODNlYTI2ZjkwNDkzZjg3MDhjOTMwMDBlZDYwOTQ= + + +# \u67E5\u8BE2\u7528\u6237\u4FE1\u606F +nhit.dc.ca.bjxt01.server-query-user-info=/service/v1/queryUserInfo +# \u5F00\u542F\u81EA\u52A8\u7B7E\u540D +nhit.dc.ca.bjxt01.server-start-auth-sign=/service/v1/startAutoSign +# \u83B7\u53D6\u7B7E\u540D\u7ED3\u679C +nhit.dc.ca.bjxt01.server-get-sign-result=/service/v1/getSignResult +# \u81EA\u52A8\u7B7E\u540D +nhit.dc.ca.bjxt01.server-auth-sign=/service/v1/autoSign +# \u9A8C\u8BC1\u6570\u636E\u7B7E\u540D +nhit.dc.ca.bjxt01.server-verify-sign=/service/v1/verifySign +# \u83B7\u53D6\u5370\u7AE0\u56FE\u7247 +nhit.dc.ca.bjxt01.server-query-image=/service/v1/queryImage +# \u65F6\u95F4\u6233\u7B7E\u540D +nhit.dc.ca.bjxt01.server-tss-info=/service/v1/createAndGetTssInfo +# \u9A8C\u8BC1\u65F6\u95F4\u6233\u7B7E\u540D +nhit.dc.ca.bjxt01.server-verify-tss=/service/v1/verifyTS \ No newline at end of file