From 4f015b8c624484e0c3b2d88b944163ce43a48d1f Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期六, 27 十一月 2021 17:15:28 +0800
Subject: [PATCH] 功能完善

---
 app/src/main/java/com/yeshi/location/app/aop/SignValidate.java |   94 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 74 insertions(+), 20 deletions(-)

diff --git a/app/src/main/java/com/yeshi/location/app/aop/SignValidate.java b/app/src/main/java/com/yeshi/location/app/aop/SignValidate.java
index 5701c07..03797d9 100644
--- a/app/src/main/java/com/yeshi/location/app/aop/SignValidate.java
+++ b/app/src/main/java/com/yeshi/location/app/aop/SignValidate.java
@@ -1,14 +1,23 @@
 package com.yeshi.location.app.aop;
 
 import com.yeshi.location.app.entity.config.SystemConfigKey;
+import com.yeshi.location.app.service.inter.config.SystemConfigService;
+import com.yeshi.location.app.utils.ApiCodeConstant;
+import com.yeshi.location.app.utils.SystemInfoUtil;
 import com.yeshi.location.app.vo.AcceptData;
-import net.sf.json.JSONObject;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.yeshi.utils.JsonUtil;
 import org.yeshi.utils.StringUtil;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.io.PrintWriter;
 import java.util.*;
 
 //瀹㈡埛绔帴鍙g鍚嶉獙璇�
@@ -17,28 +26,73 @@
 @Order(2)
 public class SignValidate {
 
-    private String getHttpServletParams(HttpServletRequest request) {
-        if (request == null) {
-            return "";
-        }
-        Map map = request.getParameterMap();
-        if (map != null) {
-            Iterator<String> its = map.keySet().iterator();
-            JSONObject json = new JSONObject();
-            while (its.hasNext()) {
-                String next = its.next();
-                if (map.get(next) != null) {
-                    Object[] objects = (Object[]) map.get(next);
-                    if (objects != null && objects.length > 0) {
-                        json.put(next, objects[0].toString());
-                    }
-                }
+    public static final String EDP = "execution(* com.yeshi.location.app.controller.client..*.*(..))";
+
+    @Resource
+    private SystemConfigService systemConfigService;
+
+    @Around(EDP)
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+
+        Object[] args = joinPoint.getArgs();
+        ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder
+                .getRequestAttributes();
+        PrintWriter out = null;//servletContainer.getResponse().getWriter();
+        AcceptData acceptData = null;
+        for (Object obj : args) {
+            if (obj instanceof AcceptData) {
+                acceptData = (AcceptData) obj;
+                break;
             }
-            return json.toString();
         }
-        return "";
+
+        if (acceptData != null) {
+            acceptData.setSystem(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()));
+        }
+
+        boolean signIsRight = true;//signIsRight(servletContainer.getRequest(), acceptData);
+        if (!signIsRight) {
+            return (JsonUtil.loadFalseResult(ApiCodeConstant.CODE_FAIL_SIGN_ERROR, "绛惧悕閿欒"));
+        }
+
+        if (Math.abs((acceptData.getTimestamp() - System.currentTimeMillis())) > 1000 * 60 * 10) {
+            out.print(JsonUtil.loadFalseResult(ApiCodeConstant.CODE_FAIL_OUT_TIME, "鏃堕棿閿欒"));
+            return null;
+        }
+
+        return joinPoint.proceed();
     }
 
+    /**
+     * 鍒ゆ柇绛惧悕鐨勬纭�� Android version>50
+     *
+     * @param request
+     * @return
+     */
+    private boolean signIsRight(HttpServletRequest request, AcceptData acceptData) {
+        Map<String, String[]> map = request.getParameterMap();
+        Iterator<String> its = map.keySet().iterator();
+        List<String> list = new ArrayList<>();
 
-
+        while (its.hasNext()) {
+            String key = its.next();
+            if (key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("callback") || key.equalsIgnoreCase("_")) {
+                continue;
+            }
+            String[] values = map.get(key);
+            list.add(key + "=" + values[0]);
+        }
+        Collections.sort(list);
+        String str = "";
+        for (String st : list) {
+            str += st + "&";
+        }
+        String key = systemConfigService.getValueCache(acceptData.getSystem(), SystemConfigKey.signKey);
+        String sign = StringUtil.Md5(str + key);
+        if (sign.equalsIgnoreCase(request.getParameter("sign") + "")) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 }

--
Gitblit v1.8.0