From d6a57e584218c585af0fcedfc1d962d08a06c0ce Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期四, 23 五月 2024 15:12:42 +0800
Subject: [PATCH] 跨域

---
 src/main/resources/config/application-dev.yml        |   16 ++
 src/main/java/com/whyc/constant/YamlProperties.java  |  199 +++++++++++++++++++++++++++++++++
 src/main/java/com/whyc/filter/CrossDomainFilter.java |  100 ++++++++++++++++
 3 files changed, 315 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/whyc/constant/YamlProperties.java b/src/main/java/com/whyc/constant/YamlProperties.java
new file mode 100644
index 0000000..fd9b18a
--- /dev/null
+++ b/src/main/java/com/whyc/constant/YamlProperties.java
@@ -0,0 +1,199 @@
+package com.whyc.constant;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * Yaml閰嶇疆鍙傛暟 瀹炰綋绫�
+ */
+@Component
+public class YamlProperties {
+
+    /**
+     * 杩愯妯″紡:dev,prod
+     */
+    public static String profileType;
+
+    /**
+     * 绯荤粺绫诲瀷
+     * 1:鏅��,娌℃湁澶氶噸鏍¢獙
+     * 2:涓ユ牸,鏈夊閲嶆牎楠�(鐧诲綍,闃查噸鏀�,鍙傛暟杩囨护)
+     */
+    public static Integer systemType;
+
+    /**浜鸿劯璇嗗埆瀵规瘮闃堝��*/
+    public static Float faceThreshold;
+
+    /**鍛婅鐭俊寮�鍏�*/
+    public static String messageSwitch;
+    public static String messageSecretId;
+    public static String messageSecretKey;
+    public static String messageRegion;
+    public static String messageSdkAppId;
+    public static String messageSignName;
+    public static String messageTemplateId;
+    public static String appId4Win;
+    public static String sdkKey4Win;
+    public static String appId4Linux;
+    public static String sdkKey4Linux;
+    public static String activeKey;
+    public static Integer faceType;
+
+    /**鍛婅宸ュ崟寮�鍏�*/
+    public static String alarmTaskSwitch;
+
+    /**绯荤粺杩愯妯″紡*/
+    public static Integer runModel;
+
+    /**鑷畾涔夊父閲�*/
+    public static String fontDynamicCodeSwitch;
+    public static String allowedCORSDomainList;
+    public static String restartPasswd;
+    public static String publicKeyOld;
+    public static String privateKeyOld;
+    public static String publicKey;
+    public static String privateKey;
+    public static String aesDefaultKey;
+    public static String aesIv;
+    public static String i18nLanguage;
+
+    @Value("${spring.profiles.active}")
+    public void setProfileType(String profileType) {
+        YamlProperties.profileType = profileType;
+    }
+
+    @Value("${system.type}")
+    public void setSystemType(Integer systemType) {
+        YamlProperties.systemType = systemType;
+    }
+
+    @Value("${custom.face.threshold}")
+    private void setFaceThreshold(Float faceThreshold) {
+        YamlProperties.faceThreshold = faceThreshold;
+    }
+
+    @Value("${custom.message.switch}")
+    private void setMessageSwitch(String messageSwitch) {
+        YamlProperties.messageSwitch = messageSwitch;
+    }
+
+    @Value("${custom.message.secret_id}")
+    private void setMessageSecretId(String messageSecretId) {
+        YamlProperties.messageSecretId = messageSecretId;
+    }
+
+    @Value("${custom.message.secret_key}")
+    private void setMessageSecretKey(String messageSecretKey) {
+        YamlProperties.messageSecretKey = messageSecretKey;
+    }
+
+    @Value("${custom.message.region}")
+    private void setMessageRegion(String messageRegion) {
+        YamlProperties.messageRegion = messageRegion;
+    }
+
+    @Value("${custom.message.smsSdkAppId}")
+    private void setMessageSdkAppId(String messageSdkAppId) {
+        YamlProperties.messageSdkAppId = messageSdkAppId;
+    }
+
+    @Value("${custom.message.signName}")
+    private void setMessageSignName(String messageSignName) {
+        YamlProperties.messageSignName = messageSignName;
+    }
+
+    @Value("${custom.message.templateId}")
+    private void setMessageTemplateId(String messageTemplateId) {
+        YamlProperties.messageTemplateId = messageTemplateId;
+    }
+
+    @Value("${custom.alarm.task.switch}")
+    private void setAlarmTaskSwitch(String alarmTaskSwitch) {
+        YamlProperties.alarmTaskSwitch = alarmTaskSwitch;
+    }
+
+    @Value("${custom.face.appId4Win}")
+    private void setAppId4Win(String appId4Win) {
+        YamlProperties.appId4Win = appId4Win;
+    }
+
+    @Value("${custom.face.sdkKey4Win}")
+    private void setSdkKey4Win(String sdkKey4Win) {
+        YamlProperties.sdkKey4Win = sdkKey4Win;
+    }
+
+    @Value("${custom.face.appId4Linux}")
+    private void setAppId4Linux(String appId4Linux) {
+        YamlProperties.appId4Linux = appId4Linux;
+    }
+
+    @Value("${custom.face.sdkKey4Linux}")
+    private void setSdkKey4Linux(String sdkKey4Linux) {
+        YamlProperties.sdkKey4Linux = sdkKey4Linux;
+    }
+
+    @Value("${custom.face.activeKey}")
+    private void setActiveKey(String activeKey) {
+        YamlProperties.activeKey = activeKey;
+    }
+
+    @Value("${custom.face.type}")
+    public void setFaceType(Integer faceType) {
+        YamlProperties.faceType = faceType;
+    }
+
+    @Value("${custom.fontDynamicCode}")
+    public void setFontDynamicCodeSwitch(String fontDynamicCodeSwitch) {
+        YamlProperties.fontDynamicCodeSwitch = fontDynamicCodeSwitch;
+    }
+
+    @Value("${configFile.type}")
+    public void setRunModel(Integer runModel) {
+        YamlProperties.runModel = runModel;
+    }
+
+    @Value("${custom.cors}")
+    public void setAllowedCORSDomainList(String allowedCORSDomainList) {
+        YamlProperties.allowedCORSDomainList = allowedCORSDomainList;
+    }
+
+    @Value("${custom.restartPasswd}")
+    public void setRestartPasswd(String restartPasswd) {
+        YamlProperties.restartPasswd = restartPasswd;
+    }
+
+    @Value("${custom.rsa.publicKeyOld}")
+    public void setPublicKeyOld(String publicKeyOld) {
+        YamlProperties.publicKeyOld = publicKeyOld;
+    }
+
+    @Value("${custom.rsa.privateKeyOld}")
+    public void setPrivateKeyOld(String privateKeyOld) {
+        YamlProperties.privateKeyOld = privateKeyOld;
+    }
+
+    @Value("${custom.rsa.publicKey}")
+    public void setPublicKey(String publicKey) {
+        YamlProperties.publicKey = publicKey;
+    }
+
+    @Value("${custom.rsa.privateKey}")
+    public void setPrivateKey(String privateKey) {
+        YamlProperties.privateKey = privateKey;
+    }
+
+    @Value("${custom.aes.defaultKey}")
+    public void setAesDefaultKey(String aesDefaultKey) {
+        YamlProperties.aesDefaultKey = aesDefaultKey;
+    }
+
+    @Value("${custom.aes.iv}")
+    public void setAesIv(String aesIv) {
+        YamlProperties.aesIv = aesIv;
+    }
+
+    @Value("${custom.i18n}")
+    public void setI18nLanguage(String i18nLanguage) {
+        YamlProperties.i18nLanguage = i18nLanguage;
+    }
+}
diff --git a/src/main/java/com/whyc/filter/CrossDomainFilter.java b/src/main/java/com/whyc/filter/CrossDomainFilter.java
new file mode 100644
index 0000000..ada0dd0
--- /dev/null
+++ b/src/main/java/com/whyc/filter/CrossDomainFilter.java
@@ -0,0 +1,100 @@
+package com.whyc.filter;
+
+import com.whyc.constant.YamlProperties;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @Description :
+ * @date 2020/09/11
+ **/
+@WebFilter
+public class CrossDomainFilter implements Filter {
+
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        System.out.println("鎵ц浜嗚繃婊ゅ櫒CrossDomainFilter");
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        HttpServletResponse resp= (HttpServletResponse) response;
+        HttpServletRequest req= (HttpServletRequest) request;
+        String origin = req.getHeader("Origin");
+        if(StringUtils.isNotBlank(origin)) { //娌℃湁origin鏉ユ簮,涓嶅厑璁歌法鍩熻缃�
+            String allowedCORSDomainList = YamlProperties.allowedCORSDomainList;
+            List<String> allowedList = new LinkedList<>();
+            if (!allowedCORSDomainList.equals("")) { //瀛樺湪璺ㄥ煙鐧藉悕鍗�,鍒ゆ柇,璁剧疆
+                String[] allowedCORSDomain = allowedCORSDomainList.split(",");
+                allowedList = Arrays.asList(allowedCORSDomain);
+                if (allowedList.contains(origin)) {
+                    resp.setHeader("Access-Control-Allow-Origin", origin);
+                    resp.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,token");
+                    //resp.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
+                    //resp.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, PATCH");
+                    resp.setHeader("Access-Control-Allow-Methods", "GET, POST");
+                    resp.setHeader("Access-Control-Allow-Credentials", "true");
+                }
+            }
+        }
+
+        //鍙噯浣跨敤GET,POST
+        String method = req.getMethod().toUpperCase();
+        String profileType = YamlProperties.profileType;
+        if(!profileType.contains("dev") && !(method.equals("GET")||method.equals("POST"))){
+            resp.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+            response.setContentType("text/html;charset=utf-8");
+            response.getWriter().write("涓嶅畨鍏ㄧ殑璇锋眰");
+            return;
+        }
+        //澶勭悊鍝嶅簲澶寸己澶�,淇℃伅婕忔礊
+        /*resp.addHeader("X-Frame-Options","SAMEORIGIN");
+        resp.addHeader("Referrer-Policy","origin");
+        resp.addHeader("Content-Security-Policy","object-src 'self'");
+        resp.addHeader("X-Permitted-Cross-Domain-Policies","master-only");
+        resp.addHeader("X-Content-Type-Options","nosniff");
+        resp.addHeader("X-XSS-Protection","1; mode=block");
+        resp.addHeader("X-Download-Options","noopen");
+        resp.addHeader("Strict-Transport-Security","max-age=63072000; includeSubdomains; preload");*/
+        resp.setHeader("X-Frame-Options","SAMEORIGIN");
+        resp.setHeader("Referrer-Policy","origin");
+        resp.setHeader("Content-Security-Policy","object-src 'self'");
+        resp.setHeader("X-Permitted-Cross-Domain-Policies","master-only");
+        resp.setHeader("X-Content-Type-Options","nosniff");
+        resp.setHeader("X-XSS-Protection","1; mode=block");
+        resp.setHeader("X-Download-Options","noopen");
+        resp.setHeader("Strict-Transport-Security","max-age=63072000; includeSubdomains; preload");
+
+        //鍗曢〉闈㈠簲鐢�,鍙厑璁镐竴涓〉闈ndex.html
+        String servletPath = req.getServletPath();
+        if(servletPath.contains(".html")){
+            if(!servletPath.equals("/index.html") && !servletPath.equals("/doc.html") && !servletPath.equals("/mobile/index.html")){
+                resp.setStatus(202);
+                return;
+            }
+            HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper((HttpServletRequest)req);
+            if(servletPath.equals("/index.html") && req.getParameter("n") == null) {
+                RequestDispatcher dispatcher = wrapper.getRequestDispatcher("/");
+                dispatcher.forward(request, resp);
+                return;
+            }
+        }
+
+        chain.doFilter(request, resp);
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+}
diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml
index ae27384..6ec5b1d 100644
--- a/src/main/resources/config/application-dev.yml
+++ b/src/main/resources/config/application-dev.yml
@@ -74,3 +74,19 @@
   community: public
   retries: 1
   timeout: 5000
+custom:
+  #鐧诲綍楠岃瘉鐮� on/off
+  fontDynamicCode: on
+  #鍏佽璺ㄥ煙鐨勭櫧鍚嶅崟 http://192.168.10.132:8080,http://192.168.10.109:8080
+  cors: http://localhost:8080,http://192.168.10.114:8080,,http://192.168.10.86:8080
+  #閲嶅惎瀵嗙爜
+  restartPasswd: ENC(AKxTGQo6bAABeC62B8Dtxw==)
+  rsa:
+    publicKeyOld: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPpJ3j+SHQ69lqq+ShV7deA40Y+8rYra6rr4ReOJ+UE7ek8tsJJrcy1xMO1SophJdHXXwSNbZWhnJW9GlIq1Um6IplkwFc/AtyoeJDP3EJtUZgI5H6fSz0BPLFHn18C0Nxz1Br109U07DqQdMsarcBmKXYQw+2oZOz0KpA5b0FawIDAQAB
+    privateKeyOld: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI+kneP5IdDr2Wqr5KFXt14DjRj7ytitrquvhF44n5QTt6Ty2wkmtzLXEw7VKimEl0ddfBI1tlaGclb0aUirVSboimWTAVz8C3Kh4kM/cQm1RmAjkfp9LPQE8sUefXwLQ3HPUGvXT1TTsOpB0yxqtwGYpdhDD7ahk7PQqkDlvQVrAgMBAAECgYA8ASdX4W2n6a4kKnRSleLqqg8aHazqAPvTinmAJqU65VW02SJ42yxyV3gFnTSErXfIfxviO3/U+0ruWiFVEwV5oDEh0dOd+HHGm4YzFXIRglMeRBgLuVJ+owzoVDwZstiIBa69DIjaJtmpSf5FjwxAth+gtCv3e11IXHraKN720QJBAMPMB1WtmpRGYHxWVYjKSL+RGw+h3gMQLk3exZjhmYRlXuqfVZ2Zol+NazDc59K5f+geMdJ0/X2kKnKLVjWzYHMCQQC7z1cFYswtLemxGfj+dwlVC01VL4pKa7HGHl/FAQ2UNYZY2d5hE/nXYbTpfI0gMowX926/aFpia7NbAUJO7WEpAkAyUFa+LJthaOhYazMVsK2bFKW4kabkcJ8Fga6TR73UaNxIPGOa2SUBmuylpM6ptuNoeYHiDBAr3ijOQIIJ0KuDAkBy9fPahCNe9F+73J4hhVPdDtIDdto7u7hSAX215XMeabUW5iXNXqDsSg6nbWolb0t50CemWoYZALwE1Lx1+7AhAkEAoZtFt+2skjAxHEqNUye4vKBqB2Ng/wmfitCfT34lXWQsxs4BGk/8eQMzkam9bcB7FcinolxHF/1UjsUYpI+AgA==
+    publicKey: MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAu7CdCMIoWXUX584JpmE1bTE1r1MtmZGswsSbsm4s9zqETQ4BmUT2kz/wvvGsI8T3ZvTT4KIyKP4Ez+yNVejMM5XwR95KF4e3UwMc724buWKl4pVL09kvkCZt8ZKf359VAvhyHHz80wIiVmJs6xbho7OBsv/s7Hwho0n4HPL4u/eNR5vWa2rtgQG1+fi1XP0UiSRKKW15Va9R2CI3zB+sffquhyX5fi+06NibWzk7OPU+EGvAwkaJtrmfLAvpwr4+G0MBLIsPVFV17Sgpoj62rtfbhHwmLSo1JTw+/JskDQOjxXfw+w3uHAZgPTlEmn2Ya9ssIljqCBfvM9nbGUWcnmppKlPm6kECa4RsgPiRgPFV+nT/Q98kfUTb798Sy63x4NIZkLQn1DDbmcAgUqLR6y1r0fD8Ne3vVtuZlVR/8ZlcRAfb+th2cNN0rytrnUreJo7kPtTFdkNtmj0KdUkRO8ea0YymEQal+b0tCl3V8osSy+qO2OVRd7yCvpOWEYOBAgMBAAE=
+    privateKey: MIIG/gIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQC7sJ0IwihZdRfnzgmmYTVtMTWvUy2ZkazCxJuybiz3OoRNDgGZRPaTP/C+8awjxPdm9NPgojIo/gTP7I1V6MwzlfBH3koXh7dTAxzvbhu5YqXilUvT2S+QJm3xkp/fn1UC+HIcfPzTAiJWYmzrFuGjs4Gy/+zsfCGjSfgc8vi7941Hm9Zrau2BAbX5+LVc/RSJJEopbXlVr1HYIjfMH6x9+q6HJfl+L7To2JtbOTs49T4Qa8DCRom2uZ8sC+nCvj4bQwEsiw9UVXXtKCmiPrau19uEfCYtKjUlPD78myQNA6PFd/D7De4cBmA9OUSafZhr2ywiWOoIF+8z2dsZRZyeamkqU+bqQQJrhGyA+JGA8VX6dP9D3yR9RNvv3xLLrfHg0hmQtCfUMNuZwCBSotHrLWvR8Pw17e9W25mVVH/xmVxEB9v62HZw03SvK2udSt4mjuQ+1MV2Q22aPQp1SRE7x5rRjKYRBqX5vS0KXdXyixLL6o7Y5VF3vIK+k5YRg4ECAwEAAQKCAYEAsVBm6pFSwUCn9uxlnXOUn7WvvBTerYg8KDzJwsXnYSE9P/aNeBj4wZ/Udu+l6pz4BaIiUMOqk6N3NF+MHq8xy0JJn/vXD2e9v4TfXysssfUKNodI/bjfAFXt5BzbQM4r6ASC+Xry9v27JtURhP826Ap763lwgPG8baFB70dzyVBTfmUxKoX4HrpZCvD1lgXZ0r4f+gdca6CXt5KMGCGMOfAL1c4AaD/1r0yDaKkm0+aMXcMOdfthuuieAWS30K0cK7A2GIHmWWwvNrGW/EqIHUKLBIdrXo9bDq5X1vMnw9FoCfjEwgCtlsGHMbgoVt6Zd3ziNjcNQ/nVQZEBLmyz1pVL+RixxZN/RCEyQSM+0EBeJ4VV75unTvz+qT05r6Lv07L66pAt7VPfW5705e6SU1IPUezZhAqh+fY33szloFCEWVP+n2szEZYSYM8ZZW+ctdzjyj3SNJc6Z0eh6MPBQzTTz4Rk+NXpHnyqBONRsIFvbihewO+7j97Ct/RshhYBAoHBAO84WM29k7Aqochn6TUZC7rmwtmJNNRFIkkxVSj0NTe8cHvl+qWDooSHnTJSMm/xyvzYa3KOaKEviegPXuVMYLkZD1i4Wd58YzcC2fuAHcL6F41ZhrbD+GOpitQhmaud2RCm6gxWlylzuuUPtubnLipoy0WRb3X+C9ub+GMmAP+KLsEeWZUxAv806MsTqNJqagHLmvIcshnaKrxbReCorvQfIotQ/NdSw6/tJfHSPAG0KrccB9KSUxjLmHaOYLIHkQKBwQDI2vGAzHqTypoL47I7cOLDzVZ2KammhJg2wwyJdCWSy2OzJvnrgJaqOrQtVNUO8EJn5cLMlJDBFz7rbMvoO76oF/22CMNb8bhv3wh1yQfZ/IKGunrSSFH0jtTO2bfSQJM9sgJzMYLiOEy1yaPXZ43QeoVsoDQOKHGh3dF8Y6aTkA5FC9x4pmPzpRAgH5/X3THj6BIWbEI5BRiywZHWSboymF+DkT2NDDPoMQ9zML/04O30Tuy8DbFf9xTw3wroJPECgcBAJdX6ZcnCxcvYV7T7nhm9JsA9YUOfYGKPSgFSGBplNczcDJGn7KKZ81u98LjBuA78unQlpfZ8sqjCZ8zEpDSTrhqladn/hU99ovAdNv/EFxhVuRoczHRBFWe69r+ke5GHm5rLcDTc0sHdRtd/F6MTkEJiB1viQhuf6jUzMS+3VrCu7JqNHTV2hhOe0UjGE+8VSCnmnrdLo2suUzNryRAROoAi57bFbtY2yNsR+5RHyK5jp8qZNs+9qGrb79YSJ2ECgcAHZTBRKrY0rNgBKhAM6jofNXdCgIQzklw8X/AdO36KqhxwozW+ewyRFfo+VQpHM4duZeJHQA0YXu+9IVNcqJ57d+6qfiYbQ4oj7FVWaOF2IDr6FPGivnDuDTg+qXuALUp+kghPD3qfM613YAY9Tx3EmE5DUp64CrssV4t4Bf9DHaG43xfuBUpW1TQDysZK32UP3CKWWsQRb2OaaVAiULKfXEbgBD/86n8axHuqJRhcPs/kF+fVgLeQLfvCZqPzKjECgcEAvBdzAp/vK/C8FYa3JVU1zcQKAIzv5HLyjLMCYYDkz5z7YcscJ3JUp+euIYem0i1hE3a3JpB5iqy92CauF1zZTb7Kqom8kes4fPf3PnDllIS2wMagPAMPubO7nuN9fa6KOoX//vwqvq+WnbLIXtPoOlaxLdUud5gIRgVTz+0qc+8e5CUvv4+EQ2dUDkZLNFHPgvCFTD2ylEC3DXC0q4vWLZ7o14zniuhE3M3Kpf3UIIAFdzRlUv2n38kbXOUTxuZm
+  aes:
+    defaultKey: ENC(KdXXhvt6v7BDw7MgsR4J1OgahZgjl3kEil10+147oGA=)
+    iv: ENC(Gtzf6s+BRoC1iQsRLMswSlBDSMom0kWtx5+SMJgaVDg=)
+  i18n: zh-CN

--
Gitblit v1.9.1