dengsixing 1 jaar geleden
bovenliggende
commit
547b305993

+ 12 - 0
src/main/java/com/fdkankan/common/UserAgentUtils.java

@@ -0,0 +1,12 @@
+
+package com.fdkankan.common;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class UserAgentUtils {
+
+    public static boolean isMobileDevice(HttpServletRequest request) {
+        String userAgent = request.getHeader("User-Agent");
+        return userAgent != null && (userAgent.contains("Android") || userAgent.contains("iPhone") || userAgent.contains("iPad") || userAgent.contains("iPod") || userAgent.contains("Mobile"));
+    }
+}

+ 109 - 0
src/main/java/com/fdkankan/common/WebUtil.java

@@ -0,0 +1,109 @@
+package com.fdkankan.common;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.ContentType;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
+import com.alibaba.fastjson.JSON;
+import org.aspectj.lang.JoinPoint;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * TODO
+ * </p>
+ *
+ * @author dengsixing
+ * @since 2022/6/9
+ **/
+public class WebUtil {
+
+    private final static String UNKNOWN = "unknown";
+
+    /**
+     * aop中获取请求参数中的参数值
+     * @param pjp
+     * @param request
+     * @return
+     */
+    public static String getParameter(String paramName, JoinPoint pjp, HttpServletRequest request){
+        Object[] args = pjp.getArgs();
+        String contentType = request.getContentType();
+        if(StrUtil.isNotEmpty(contentType) && contentType.contains(ContentType.JSON.getValue())){
+            HashMap hashMap = JSON.parseObject(JSON.toJSONString(args[0]), HashMap.class);
+            return (String) hashMap.get(paramName);
+        }
+        return request.getParameter(paramName);
+    }
+
+    public static Map<String, Object> getParameter(JoinPoint pjp, HttpServletRequest request) {
+        Object[] args = pjp.getArgs();
+        String contentType = request.getContentType();
+        if (StrUtil.isNotEmpty(contentType) && contentType.contains(ContentType.JSON.getValue())) {
+            return JSON.parseObject(JSON.toJSONString(args[0]), HashMap.class);
+        } else {
+            Enumeration<String> parameterNames = request.getParameterNames();
+            if(CollUtil.isEmpty(parameterNames)){
+                return null;
+            }
+            Map<String, Object> params = new HashMap<>();
+            String name = null;
+            do {
+                name = parameterNames.nextElement();
+                params.put(name, request.getParameter(name));
+            }while (parameterNames.hasMoreElements());
+            return params;
+        }
+    }
+
+    /**
+     * 获取客户端请求终端地址
+     * @param request  客户端请求request
+     * @return  终端ip地址
+     */
+    public static String getIpAddress(HttpServletRequest request) {
+        String ip = request.getHeader("X-Forwarded-For");
+        if(StrUtil.isNotBlank(ip) && UNKNOWN.equalsIgnoreCase(ip)){
+            if(ip.indexOf(",") != -1){
+                ip = ip.split(",")[0];
+                return ip;
+            }
+        }
+        ip = request.getHeader("Proxy-Client-IP");
+        if(StrUtil.isNotBlank(ip)) return ip;
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        if(StrUtil.isNotBlank(ip)) return ip;
+            ip = request.getHeader("HTTP-CLIENT-IP");
+        if(StrUtil.isNotBlank(ip)) return ip;
+            ip = request.getHeader("HTTP-X-FORWARDED-FOR");
+        if(StrUtil.isNotBlank(ip)) return ip;
+            ip = request.getHeader("X-Real-IP");
+        if(StrUtil.isNotBlank(ip)) return ip;
+            ip = request.getRemoteAddr();
+        return ip;
+    }
+
+    /**
+     * <p>
+            获取浏览器版本
+     * </p>
+     * @author dengsixing
+     * @date 2022/8/19
+     * @param request
+     * @return java.lang.String
+     **/
+    public static  String getBrowser(HttpServletRequest request){
+        String userAgentStr = request.getHeader("User-Agent");
+        UserAgent userAgent = UserAgentUtil.parse(userAgentStr);
+        String browserType = userAgent.getBrowser().toString();
+        String browserVersion = userAgent.getVersion();
+        String browserFormat = "%s(版本%s)";
+        return  String.format(browserFormat, browserType, browserVersion);
+    }
+
+}

+ 57 - 0
src/main/java/com/fdkankan/scene/Interceptor/CheckPermitAspect.java

@@ -0,0 +1,57 @@
+package com.fdkankan.scene.Interceptor;
+
+import com.fdkankan.common.UserAgentUtils;
+import com.fdkankan.common.WebUtil;
+import lombok.extern.log4j.Log4j2;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+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 javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.Map;
+
+@Log4j2
+@Aspect
+@Component
+@Order(101)
+public class CheckPermitAspect {
+
+	@Pointcut("@annotation(com.fdkankan.scene.annotation.VrLog)")
+	public void checkCooperationPermit() {
+	}
+
+	/**
+	 * 前置通知 用于判断用户协作场景是否有协作权限
+	 *
+	 * @param joinPoint
+	 *            切点
+	 * @throws IOException
+	 */
+	@Before("checkCooperationPermit()")
+	public void doBefore(JoinPoint joinPoint) throws Exception {
+		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+		boolean mobileDevice = UserAgentUtils.isMobileDevice(request);
+		String userAgent = "pc";
+		if(mobileDevice){
+			userAgent = "mobile";
+		}
+
+		//请求4a接口获取用户信息
+		Map<String, Object> parameter = WebUtil.getParameter(joinPoint, request);
+		String syscode = (String) parameter.get("syscode");
+		String acctId = (String) parameter.get("acctId");
+		String token = (String) parameter.get("token");
+
+		log.info("123");
+
+		//写入表
+	}
+
+}

+ 2 - 2
src/main/java/com/fdkankan/scene/annotation/CheckPermit.java

@@ -9,6 +9,6 @@ import java.lang.annotation.Target;
 @Target({ElementType.PARAMETER, ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
-public @interface CheckPermit {
+public @interface VrLog {
     String description() default "";
-}
+}

+ 2 - 0
src/main/java/com/fdkankan/scene/controller/SceneController.java

@@ -4,6 +4,7 @@ package com.fdkankan.scene.controller;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
 import com.fdkankan.common.constant.SceneInfoReqType;
+import com.fdkankan.scene.annotation.VrLog;
 import com.fdkankan.scene.bean.ResultData;
 import com.fdkankan.scene.httpclient.CustomHttpClient;
 import com.fdkankan.scene.service.SceneFileMappingService;
@@ -44,6 +45,7 @@ public class SceneController {
      * @param param
      * @return com.fdkankan.scene.vo.SceneInfoVO
      **/
+    @VrLog
     @GetMapping(value = "/getInfo")
     public ResultData getInfo(@Validated SceneInfoParamVO param) throws Exception{
         param.setReqType(SceneInfoReqType.VIEW.code());

+ 10 - 10
src/main/java/com/fdkankan/scene/service/impl/SceneServiceImpl.java

@@ -93,16 +93,16 @@ public class SceneServiceImpl extends ServiceImpl<SceneMapper, Scene> implements
         String encode = ThreeDESUtil.encode(JSON.toJSONString(params), gatewayKey);
         checkProwadaTokenParam.put("args", encode);
 
-        JSONObject result = ws4AServiceClient.checkProwadaToken(checkProwadaTokenParam);
-        log.info("场景:{},4A校验token结果:{}", param.getNum(), result);
-        if("success".equals(result.getString("SUCCESS"))){
-            return ResultData.error(4000, "4A鉴权失败");
-        }
-        String data = result.getString("data");
-        JSONObject dataObj = JSONObject.parseObject(data);
-        if(!"0".equals(dataObj.getString("RSP"))){
-            return ResultData.error(4000, dataObj.getString("ERRDESC"));
-        }
+//        JSONObject result = ws4AServiceClient.checkProwadaToken(checkProwadaTokenParam);
+//        log.info("场景:{},4A校验token结果:{}", param.getNum(), result);
+//        if("success".equals(result.getString("SUCCESS"))){
+//            return ResultData.error(4000, "4A鉴权失败");
+//        }
+//        String data = result.getString("data");
+//        JSONObject dataObj = JSONObject.parseObject(data);
+//        if(!"0".equals(dataObj.getString("RSP"))){
+//            return ResultData.error(4000, dataObj.getString("ERRDESC"));
+//        }
 
         String num = param.getNum();
         SceneInfoVO sceneInfoVO = null;