From bc68f4393cafe39c4fce614c8128936067ea25f7 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期二, 22 九月 2026 17:18:17 +0800
Subject: [PATCH] bug:登录问题和操作日志

---
 cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/AccountAuditGlobalFilter.java |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/AccountAuditGlobalFilter.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/AccountAuditGlobalFilter.java
index d4bbe97..63b2092 100644
--- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/AccountAuditGlobalFilter.java
+++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/AccountAuditGlobalFilter.java
@@ -44,7 +44,9 @@
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         ServerHttpRequest request = exchange.getRequest();
         String uri = request.getURI().getRawPath();
-        if (uri.startsWith("/internal/audit-logs")) return chain.filter(exchange);
+        if (uri.startsWith("/internal/audit-logs") || !shouldAudit(request.getMethodValue(), uri)) {
+            return chain.filter(exchange);
+        }
         long startedAt = System.currentTimeMillis();
         return chain.filter(exchange).then(Mono.<Void>fromRunnable(() -> writeAudit(exchange, startedAt))
                 .subscribeOn(Schedulers.boundedElastic()));
@@ -106,12 +108,28 @@
         String lower = uri.toLowerCase();
         if (lower.contains("login") || lower.contains("token")) return "LOGIN";
         if (lower.matches(".*(status|state|ticket|payment|finance|refund|withdraw|balance).*")) return "STATUS_CHANGE";
-        if ("POST".equalsIgnoreCase(method)) return "CREATE";
+        if (lower.matches(".*(add|create|save|insert|commit|submit|upload).*")) return "CREATE";
         if ("PUT".equalsIgnoreCase(method) || "PATCH".equalsIgnoreCase(method)) return "UPDATE";
         if ("DELETE".equalsIgnoreCase(method)) return "DELETE";
+        if (lower.matches(".*(edit|update|modify|change|set|reset|freeze|unfreeze|enable|disable|audit|approve|reject).*")) return "UPDATE";
         if (lower.matches(".*(phone|mobile|idcard|identity|bank|wallet).*")) return "VIEW_SENSITIVE";
         return "READ";
     }
+
+    /**
+     * 网关只记录外部用户真正触发的业务变更、登录和敏感数据访问。
+     * POST 在本系统中大量用于列表/详情查询,不能再按 HTTP 方法一概当作新增。
+     */
+    private boolean shouldAudit(String method, String uri) {
+        String lower = uri == null ? "" : uri.toLowerCase();
+        if (lower.matches(".*(login|token|phone|mobile|idcard|identity|bank|wallet).*")) return true;
+        if ("PUT".equalsIgnoreCase(method) || "PATCH".equalsIgnoreCase(method)
+                || "DELETE".equalsIgnoreCase(method)) return true;
+        return "POST".equalsIgnoreCase(method)
+                && lower.matches(".*(add|create|save|insert|edit|update|modify|delete|remove|del|"
+                + "change|set|reset|freeze|unfreeze|enable|disable|commit|submit|upload|"
+                + "audit|approve|reject|refund|withdraw|payment).*" );
+    }
     private String riskLevel(String uri, String type) {
         String lower = uri.toLowerCase();
         if ("STATUS_CHANGE".equals(type) || lower.matches(".*(finance|payment|refund|withdraw|balance|ticket).*")) return "CRITICAL";

--
Gitblit v1.7.1