KKSU
2024-07-25 c3dcca22238302f2a58f539418b3d7206ee8d381
后台
5 files modified
5 files added
221 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/advise/MyHttpInputMessage.java 37 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/advise/MyRequestBodyAdvise.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java 55 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/annotation/EncryptEnable.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/AppContants.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/SpringContextUtil.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiGameController.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiGamePlayerController.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/SystemInit.java 44 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/advise/MyHttpInputMessage.java
New file
@@ -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());
    }
}
src/main/java/cc/mrbird/febs/common/advise/MyRequestBodyAdvise.java
New file
@@ -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;
    }
}
src/main/java/cc/mrbird/febs/common/advise/MyResponseBodyAdvise.java
New file
@@ -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);
    }
}
src/main/java/cc/mrbird/febs/common/annotation/EncryptEnable.java
New file
@@ -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 {
}
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<>();
    /**
     * 系统用户
     */
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);
    }
}
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")
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")
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
src/main/java/cc/mrbird/febs/mall/quartz/SystemInit.java
New file
@@ -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());
            }
        }
    }
}