From 8dfcfee645b874b785e39bc33c578ba4e1e9a38b Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期二, 10 二月 2026 09:43:10 +0800
Subject: [PATCH] Merge branch 'rcs_master' into ctu_conveyor

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java |   76 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 76 insertions(+), 0 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java
new file mode 100644
index 0000000..6abff13
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java
@@ -0,0 +1,76 @@
+package com.zy.acs.manager.common.interceptor;
+
+import com.zy.acs.manager.common.annotation.IntegrationAuth;
+import com.zy.acs.manager.core.domain.type.NamespaceType;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Intercepts open API calls so they can be audited via IntegrationRecordAdvice.
+ */
+@Slf4j
+@Component
+public class IntegrationOpenApiInterceptor implements HandlerInterceptor {
+
+    private static final String ATTR_CONTEXT = IntegrationOpenApiInterceptor.class.getName() + ".CONTEXT";
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        if (!(handler instanceof HandlerMethod)) {
+            return true;
+        }
+        HandlerMethod handlerMethod = (HandlerMethod) handler;
+        IntegrationAuth integrationAuth = findIntegrationAuth(handlerMethod);
+        if (integrationAuth == null || integrationAuth.value() == IntegrationAuth.Enable.SKIP_LOG) {
+            return true;
+        }
+
+        NamespaceType namespaceType = integrationAuth.name() == null ? NamespaceType.NONE : integrationAuth.name();
+        IntegrationRequestContext context = new IntegrationRequestContext(
+                namespaceType,
+                handlerMethod.getBeanType().getSimpleName() + "#" + handlerMethod.getMethod().getName(),
+                System.currentTimeMillis()
+        );
+        request.setAttribute(ATTR_CONTEXT, context);
+        return true;
+    }
+
+    public static IntegrationRequestContext getContext(HttpServletRequest request) {
+        Object attribute = request.getAttribute(ATTR_CONTEXT);
+        if (attribute instanceof IntegrationRequestContext) {
+            return (IntegrationRequestContext) attribute;
+        }
+        return null;
+    }
+
+    private IntegrationAuth findIntegrationAuth(HandlerMethod handlerMethod) {
+        IntegrationAuth annotation = AnnotatedElementUtils.findMergedAnnotation(handlerMethod.getMethod(), IntegrationAuth.class);
+        if (annotation != null) {
+            return annotation;
+        }
+        return AnnotatedElementUtils.findMergedAnnotation(handlerMethod.getBeanType(), IntegrationAuth.class);
+    }
+
+    @Getter
+    public static class IntegrationRequestContext {
+
+        private IntegrationRequestContext(NamespaceType namespaceType, String handler, long startAt) {
+            this.namespaceType = namespaceType;
+            this.handler = handler;
+            this.startAt = startAt;
+        }
+
+        private final NamespaceType namespaceType;
+        private final String handler;
+        private final long startAt;
+
+    }
+
+}

--
Gitblit v1.9.1