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()); } } } }