TRX il y a 1 an
Parent
commit
1dbb630631

+ 57 - 0
src/main/java/com/zswl/dataservice/auth/OpenAPIInterceptor.java

@@ -0,0 +1,57 @@
+package com.zswl.dataservice.auth;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zswl.dataservice.model.user.LoginUser;
+import com.zswl.dataservice.service.base.RedisService;
+import com.zswl.dataservice.service.openApi.OpenApiVerifyService;
+import com.zswl.dataservice.utils.exception.UnauthorizedException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.StringUtils;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.Map;
+
+
+@Slf4j
+public class OpenAPIInterceptor implements HandlerInterceptor {
+
+    public static final String openApi = "openApi";
+
+    private OpenApiVerifyService openApiVerifyService;
+
+    public OpenAPIInterceptor(OpenApiVerifyService openApiVerifyService) {
+        this.openApiVerifyService = openApiVerifyService;
+    }
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
+        String method = request.getMethod();
+        if (method != null && "OPTIONS".equals(method)) {
+            return true;
+        }
+        String path = request.getRequestURI();
+        if (path != null && path.indexOf(openApi) > 0) {
+            return openApiVerifyService.verify(request, response, object);
+        }
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+        String path = request.getRequestURI();
+        if (path != null && path.indexOf(openApi) > 0) {
+            openApiVerifyService.saveLog(request, response, handler, modelAndView);
+        }
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        log.info("afterCompletion");
+    }
+}

+ 12 - 5
src/main/java/com/zswl/dataservice/auth/UserContextInterceptor.java

@@ -4,16 +4,22 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.zswl.dataservice.model.user.LoginUser;
 import com.zswl.dataservice.service.base.RedisService;
+import com.zswl.dataservice.service.openApi.OpenApiVerifyService;
 import com.zswl.dataservice.utils.exception.UnauthorizedException;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.StringUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
-//@Slf4j
+import javax.crypto.Mac;
+import java.util.Map;
+
+
+@Slf4j
 public class UserContextInterceptor implements HandlerInterceptor {
 
     private JWTManager jwtManager;
@@ -22,6 +28,8 @@ public class UserContextInterceptor implements HandlerInterceptor {
 
     private RedisService redisService;
 
+    private OpenApiVerifyService openApiVerifyService;
+
     public UserContextInterceptor(AuthSettings authSettings, JWTManager jwtManager, RedisService redisService) {
         this.authSettings = authSettings;
         this.jwtManager = jwtManager;
@@ -34,9 +42,10 @@ public class UserContextInterceptor implements HandlerInterceptor {
         if (method != null && "OPTIONS".equals(method)) {
             return true;
         }
-
+        if (UserAuthUtil.isFree(authSettings, request)) {
+            return true;
+        }
         String token = request.getHeader(authSettings.getTokenHeaderName());
-
         if (token != null && token.length() > 0) {
             try {
                 LoginUser user = verifyUser(token);
@@ -113,12 +122,10 @@ public class UserContextInterceptor implements HandlerInterceptor {
 
     @Override
     public void postHandle(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
-
     }
 
     @Override
     public void afterCompletion(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
-        UserContext.shutdown();
     }
 
     private LoginUser verifyUser(String token) throws UnauthorizedException {

+ 6 - 4
src/main/java/com/zswl/dataservice/config/WebMvcConfig.java

@@ -2,8 +2,10 @@ package com.zswl.dataservice.config;
 
 import com.zswl.dataservice.auth.AuthSettings;
 import com.zswl.dataservice.auth.JWTManager;
+import com.zswl.dataservice.auth.OpenAPIInterceptor;
 import com.zswl.dataservice.auth.UserContextInterceptor;
 import com.zswl.dataservice.service.base.RedisService;
+import com.zswl.dataservice.service.openApi.OpenApiVerifyService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
@@ -25,14 +27,13 @@ public class WebMvcConfig implements WebMvcConfigurer {
     @Autowired
     private RedisService redisService;
 
+    @Autowired
+    private OpenApiVerifyService openApiVerifyService;
+
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
         registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
-
-//        registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
-//        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
-
     }
 
     /**
@@ -41,6 +42,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(new UserContextInterceptor(authSettings, jwtManager, redisService));
+        registry.addInterceptor(new OpenAPIInterceptor(openApiVerifyService));
     }
 
     @Override

+ 1 - 1
src/main/java/com/zswl/dataservice/domain/iot/IotMain.java

@@ -49,7 +49,7 @@ public class IotMain extends SuperEntity {
 
     @Schema(description = "所属模版")
     @DBRef(lazy = true)
-    IotTemplate iotTemplate;
+    private IotTemplate iotTemplate;
 
     @Schema(description = "是否返回数据")
     private Boolean isReturnData = Boolean.TRUE;

+ 1 - 1
src/main/java/com/zswl/dataservice/model/openApi/sign/SignStateParam.java

@@ -21,7 +21,7 @@ public class SignStateParam {
     @NotEmpty(message = "id不能为空")
     private String id;
 
-    @NotEmpty(message = "appState不能为空")
+    @NotNull(message = "appState不能为空")
     @Schema(description = "状态")
     private AppState appState;
 

+ 70 - 0
src/main/java/com/zswl/dataservice/service/openApi/OpenApiVerifyService.java

@@ -0,0 +1,70 @@
+package com.zswl.dataservice.service.openApi;
+
+import cn.hutool.json.JSONObject;
+import com.zswl.dataservice.dao.openApi.OpenApiRequestLogDao;
+import com.zswl.dataservice.service.base.RedisService;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @author TRX
+ * @date 2024/9/11
+ */
+@Slf4j
+@Service
+public class OpenApiVerifyService {
+
+    @Autowired
+    private RedisService redisService;
+
+    @Autowired
+    private OpenApiRequestLogsService openApiRequestLogsService;
+
+    @Autowired
+    private OpenApiRequestLogDao openApiRequestLogDao;
+
+    /**
+     * 验证OpenAPI
+     *
+     * @param request
+     * @param response
+     * @param object
+     * @return
+     */
+    public boolean verify(HttpServletRequest request, HttpServletResponse response, Object object) {
+        log.info("---------------------openAPI验证----------------------");
+        Map<String, String[]> map = request.getParameterMap();
+        log.info("map: {}", map);
+        log.info("tt: {}", request.getParameter("msgId"));
+
+        Map<String, String> paramMap = new LinkedHashMap<>();
+        map.forEach((String key, String[] values) -> {
+            log.info("key: {}, values: {}", key, values);
+            paramMap.put(key, values[0]);
+        });
+        JSONObject jsonObject = new JSONObject(paramMap);
+
+        log.info("jsonObject: {}", jsonObject);
+        return true;
+    }
+
+    /**
+     * 记录日志
+     *
+     * @param request
+     * @param response
+     * @param handler
+     * @param modelAndView
+     */
+    public void saveLog(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
+
+    }
+
+}