From c3dcca22238302f2a58f539418b3d7206ee8d381 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 25 Jul 2024 10:08:02 +0800
Subject: [PATCH] 后台

---
 src/main/java/cc/mrbird/febs/common/advise/MyHttpInputMessage.java        |   37 +++++++++
 src/main/java/cc/mrbird/febs/mall/quartz/SystemInit.java                  |   44 +++++++++++
 src/main/java/cc/mrbird/febs/mall/controller/ApiGameController.java       |    2 
 src/main/java/cc/mrbird/febs/common/annotation/EncryptEnable.java         |   15 +++
 src/main/java/cc/mrbird/febs/common/advise/MyRequestBodyAdvise.java       |   49 ++++++++++++
 src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java      |    2 
 src/main/java/cc/mrbird/febs/common/utils/AppContants.java                |    8 ++
 src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java      |   55 +++++++++++++
 src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java |    2 
 src/main/java/cc/mrbird/febs/common/utils/SpringContextUtil.java          |    7 +
 10 files changed, 221 insertions(+), 0 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/advise/MyHttpInputMessage.java b/src/main/java/cc/mrbird/febs/common/advise/MyHttpInputMessage.java
new file mode 100644
index 0000000..46c2ec0
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/advise/MyHttpInputMessage.java
@@ -0,0 +1,37 @@
+package cc.mrbird.febs.common.advise;
+
+import cc.mrbird.febs.common.utils.AppContants;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpInputMessage;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author wzy
+ * @date 2022-06-14
+ **/
+public class MyHttpInputMessage implements HttpInputMessage {
+
+    private InputStream body;
+
+    @Override
+    public InputStream getBody() throws IOException {
+        return body;
+    }
+
+    @Override
+    public HttpHeaders getHeaders() {
+        return null;
+    }
+
+    public MyHttpInputMessage(InputStream body) {
+        RSA rsa = new RSA(AppContants.REQ_PRIVATE_KEY, AppContants.REQ_PUBLIC_KEY);
+        String read = IoUtil.read(body, "utf-8");
+        String decrypt = rsa.decryptStr(read, KeyType.PrivateKey);
+        this.body = IoUtil.toStream(decrypt.getBytes());
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/advise/MyRequestBodyAdvise.java b/src/main/java/cc/mrbird/febs/common/advise/MyRequestBodyAdvise.java
new file mode 100644
index 0000000..ddeb65a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/advise/MyRequestBodyAdvise.java
@@ -0,0 +1,49 @@
+package cc.mrbird.febs.common.advise;
+
+import cc.mrbird.febs.common.utils.AppContants;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+
+/**
+ * @author wzy
+ * @date 2022-06-14
+ **/
+@ControllerAdvice
+public class MyRequestBodyAdvise implements RequestBodyAdvice {
+
+    @Value("${system.debug}")
+    private boolean isDebug;
+
+    @Override
+    public boolean supports(MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
+        return true;
+    }
+
+    @Override
+    public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) throws IOException {
+
+        if(!AppContants.ENCRYPT_METHOD.contains(methodParameter.getMethod().getName()) || isDebug) {
+            return inputMessage;
+        }
+
+        return new MyHttpInputMessage(inputMessage.getBody());
+    }
+
+    @Override
+    public Object afterBodyRead(Object body, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
+        return body;
+    }
+
+    @Override
+    public Object handleEmptyBody(Object o, HttpInputMessage httpInputMessage, MethodParameter methodParameter, Type type, Class<? extends HttpMessageConverter<?>> aClass) {
+        return o;
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java b/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java
new file mode 100644
index 0000000..a398ae5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java
@@ -0,0 +1,55 @@
+package cc.mrbird.febs.common.advise;
+
+import cc.mrbird.febs.common.utils.AppContants;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+/**
+ * @author wzy
+ * @date 2022-06-14
+ **/
+@ControllerAdvice
+public class MyResponseBodyAdvise implements ResponseBodyAdvice {
+
+    @Value("${system.debug}")
+    private boolean isDebug;
+
+    @Override
+    public boolean supports(MethodParameter methodParameter, Class aClass) {
+        return true;
+    }
+
+    @Override
+    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
+        String name = methodParameter.getMethod().getName();
+        if("findPlatformBannerList".equals(name)){
+            return o;
+        }
+        if("newsDetails".equals(name)){
+            return o;
+        }
+        if("findNews".equals(name)){
+            return o;
+        }
+        if("findNewsInPage".equals(name)){
+            return o;
+        }
+        if("findNewsInfoCategory".equals(name)){
+            return o;
+        }
+        if (!AppContants.ENCRYPT_METHOD.contains(name)) {
+            return o;
+        }
+
+        RSA rsa = new RSA(AppContants.RESP_PRIVATE_KEY, AppContants.RESP_PUBLIC_KEY);
+        return rsa.encryptBase64(JSONObject.toJSONString(o), KeyType.PublicKey);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/annotation/EncryptEnable.java b/src/main/java/cc/mrbird/febs/common/annotation/EncryptEnable.java
new file mode 100644
index 0000000..658ca37
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/annotation/EncryptEnable.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author wzy
+ * @date 2022-06-14
+ **/
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface EncryptEnable {
+}
diff --git a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java
index 608974a..a10f940 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/AppContants.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/AppContants.java
@@ -1,9 +1,17 @@
 package cc.mrbird.febs.common.utils;
 
 import java.math.BigDecimal;
+import java.util.LinkedList;
 
 public class AppContants {
 
+    public static final String REQ_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1cHrcMpXoKNC8rjAa/jAbgU2bhIBmJmn6iYDfqt0Him/p2s5F0L9nfzZOLYlPq3z12zvXl9IgThhtLIBLi86RPW0ljuwpTvIZz9O36Zae9eMk5bMNsFEFsxg1IOLIM2Oc4ffNvGL58Uupp9RL5NCN1MRQyY61ISy7H2VRTznoJQIDAQAB";
+    public static final String REQ_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALVwetwylego0LyuMBr+MBuBTZuEgGYmafqJgN+q3QeKb+nazkXQv2d/Nk4tiU+rfPXbO9eX0iBOGG0sgEuLzpE9bSWO7ClO8hnP07fplp714yTlsw2wUQWzGDUg4sgzY5zh9828YvnxS6mn1Evk0I3UxFDJjrUhLLsfZVFPOeglAgMBAAECgYAPKWWS5gVB37tFsRajAs+5VK5MCyABqT8c6QWkay5KNYbRl2+6RM3h068RjFuXlUB9eQMAqpasDWqcIOZdqcKqmxm0ILF2zfPzJr4RaQNSNwDCVrKEeaDtrZQcq/0ygaNDF9y203UMHT0dfEQSGp/xkjTgXNsOuC9iLM56XScOVwJBAPOZLbrCi0h4PL7g3rWsCw8/aN6ehkJ3iTDgjYpdBwJOJSyxV0qi0xmDthGqPd99Kvc14u1jy3ghpm1SAEunrj8CQQC+rS6qajIkK7NiRmX43chDhgMPGo0UFHbmHyYBb1Eyrxu1MNWQEh221p54GsB2HqAGRhxxQ98Ds2S26Au7QpibAkA2nQAAn/8kFzjfPoEPz+uG1puHVZkaK7yJRb7V53dbz/NLqtK8O/cCAGKAYV+PzHsmg2FGAZqrazfpyHmifIx3AkBnFau/+A/JnFKr09F3XTfSwZXPyZPyAipRuQ9MAUmNtDuvloovDIxB9//OgPACLAZpvefMmFvuXUMa25LUF2n3AkBGb+vO+69NSyQM2SHKZ9fUrxx9ZPhupNt/TXNL9OMEQiLaHCYgg0tfcojGe3QjBCA6wVG+dCyZUcv5OwiW23pI";
+    public static final String RESP_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcgj54n3XV+x2Df8Hscqsbd3BQiqBNf/pQiL+4vhKaPN8ZcG0Xreq018hl+yQrOaqYNVLwvi7gfkXpb/G2TxMEnC5rtAeWsMA5mPeePe+Cg+mJ/yXR4tlk/d90L5g7PTxalH50HdCoXwFBenktitKrsDfQzi1+VCHBGUhPUjsJHQIDAQAB";
+    public static final String RESP_PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANyCPnifddX7HYN/wexyqxt3cFCKoE1/+lCIv7i+Epo83xlwbRet6rTXyGX7JCs5qpg1UvC+LuB+Relv8bZPEwScLmu0B5awwDmY954974KD6Yn/JdHi2WT933QvmDs9PFqUfnQd0KhfAUF6eS2K0quwN9DOLX5UIcEZSE9SOwkdAgMBAAECgYAt52Mv4yo5qHQFavQoz9o09pFIAwPJ/mlSmJUo1VC0ERX0isX7FvZ0PTN3n2dxJCkSVI92lHDXxRGyvd4YsK9pdErGVL2DecbbER7069y94g/uHsYq15skzLlyUNhyu2FOUCsVFy+M/C0qk14z/xG1ze3GWNHP1oc1leAYpoWmAQJBAPXxRvYTxmZAFv3J4pcf/FXqmUXdbJI5sHWXe6Pcs+rIuil5ePqX6AQBoQ5PalYhe5/kKzr7Gy6GSzlpztuOV50CQQDlhrTNytQdDCNIOL8uw3t4D8mDGuslPcRoykmaCQhd4NvaqLZrBS8k+TuS2+v5ryng3HhcYjR0h1MHHG69En+BAkEAzt2G5mxzsIWv0QACi0LoKAwPp+g67jN/7SjhYk69Nnpnu4Lk80LacKQ+J588vf2j0jVE93NGxbdHhp8s0xfDMQJBAJFlOqVeRe28oaD/aYRLCqyse39Ujv6BWSj0c5li/WzSoxKpaxzyJMIsK2PFcn8xSbsKjigfgZELpDnN9gxJaoECQCn+tZB0g9WJMaGNCMdlStPHAO2ajS1HY6BV5Xq13hixAdp5bLzbg0GrY25MrpTCFBEqCx+7F4cYUvVazLuAK6g=";
+
+    public static final LinkedList<String> ENCRYPT_METHOD = new LinkedList<>();
+
     /**
      * 系统用户
      */
diff --git a/src/main/java/cc/mrbird/febs/common/utils/SpringContextUtil.java b/src/main/java/cc/mrbird/febs/common/utils/SpringContextUtil.java
index f62a614..5345545 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/SpringContextUtil.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/SpringContextUtil.java
@@ -5,6 +5,9 @@
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 
+import java.lang.annotation.Annotation;
+import java.util.Map;
+
 /**
  * Spring Context 工具类
  * 
@@ -44,4 +47,8 @@
 		return applicationContext.getType(name);
 	}
 
+	public static Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> aclazz) {
+		return applicationContext.getBeansWithAnnotation(aclazz);
+	}
+
 }
\ No newline at end of file
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiGameController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiGameController.java
index e9d0a85..fa025db 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiGameController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiGameController.java
@@ -1,5 +1,6 @@
 package cc.mrbird.febs.mall.controller;
 
+import cc.mrbird.febs.common.annotation.EncryptEnable;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.service.GameService;
@@ -19,6 +20,7 @@
  * @date 2021-09-16
  **/
 @Slf4j
+@EncryptEnable
 @RestController
 @CrossOrigin("*")
 @RequestMapping(value = "/api/gameOwner")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java
index c45e368..7b002b3 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java
@@ -1,5 +1,6 @@
 package cc.mrbird.febs.mall.controller;
 
+import cc.mrbird.febs.common.annotation.EncryptEnable;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.service.GameService;
@@ -19,6 +20,7 @@
  * @date 2021-09-16
  **/
 @Slf4j
+@EncryptEnable
 @RestController
 @CrossOrigin("*")
 @RequestMapping(value = "/api/gamePlayer")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java
index 40fe4a9..248b6b3 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java
@@ -1,5 +1,6 @@
 package cc.mrbird.febs.mall.controller;
 
+import cc.mrbird.febs.common.annotation.EncryptEnable;
 import cc.mrbird.febs.common.annotation.Limit;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
@@ -25,6 +26,7 @@
  * @date 2021-09-16
  **/
 @Slf4j
+@EncryptEnable
 @CrossOrigin("*")
 @RequiredArgsConstructor
 @RestController
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/SystemInit.java b/src/main/java/cc/mrbird/febs/mall/quartz/SystemInit.java
new file mode 100644
index 0000000..b9db8a2
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/SystemInit.java
@@ -0,0 +1,44 @@
+package cc.mrbird.febs.mall.quartz;
+
+import cc.mrbird.febs.common.annotation.EncryptEnable;
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.SpringContextUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2022-06-09
+ **/
+@Slf4j
+@Component
+public class SystemInit implements CommandLineRunner {
+
+//    @PostConstruct
+//    public void init() {
+//
+//    }
+
+    @Override
+    public void run(String... args) throws Exception {
+        Map<String, Object> encryptBeans = SpringContextUtil.getBeansWithAnnotation(EncryptEnable.class);
+        if (encryptBeans.isEmpty()) {
+            return;
+        }
+
+        for (Map.Entry<String, Object> entry : encryptBeans.entrySet()) {
+            Method[] methods = entry.getValue().getClass().getMethods();
+            if (methods.length == 0) {
+                continue;
+            }
+
+            for (Method method : methods) {
+                AppContants.ENCRYPT_METHOD.add(method.getName());
+            }
+        }
+    }
+}

--
Gitblit v1.9.1