From da0319e053d98d10f4163bd6e0353457f4a89139 Mon Sep 17 00:00:00 2001 From: heyunfei Date: Sun, 27 Apr 2025 14:49:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=AF=B7=E6=B1=82id=20=20=E6=96=B9=E4=BE=BF=E7=BA=BF=E4=B8=8A?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E6=9F=A5=E8=AF=A2=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/pom.xml | 6 ++ .../src/main/resources/logback-plus.xml | 2 +- ruoyi-common/pom.xml | 1 + ruoyi-common/ruoyi-common-bom/pom.xml | 7 +++ ruoyi-common/ruoyi-common-mdc/pom.xml | 33 ++++++++++ .../mdc/config/MdcAutoConfiguration.java | 25 ++++++++ .../common/mdc/filter/RequestIdFilter.java | 60 +++++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + 8 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 ruoyi-common/ruoyi-common-mdc/pom.xml create mode 100644 ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/config/MdcAutoConfiguration.java create mode 100644 ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/filter/RequestIdFilter.java create mode 100644 ruoyi-common/ruoyi-common-mdc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 9e9780464..326c1a6b7 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -93,6 +93,12 @@ ruoyi-workflow + + + org.dromara + ruoyi-common-mdc + + de.codecentric spring-boot-admin-starter-client diff --git a/ruoyi-admin/src/main/resources/logback-plus.xml b/ruoyi-admin/src/main/resources/logback-plus.xml index b74289ecd..a8c47d79a 100644 --- a/ruoyi-admin/src/main/resources/logback-plus.xml +++ b/ruoyi-admin/src/main/resources/logback-plus.xml @@ -2,7 +2,7 @@ + value="%cyan(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %red([%X{requestId}]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/> diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 2930fd0b0..e7ce5b434 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -34,6 +34,7 @@ ruoyi-common-tenant ruoyi-common-websocket ruoyi-common-sse + ruoyi-common-mdc ruoyi-common diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index 62967c30d..c31685a75 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -179,6 +179,13 @@ ${revision} + + + org.dromara + ruoyi-common-mdc + ${revision} + + diff --git a/ruoyi-common/ruoyi-common-mdc/pom.xml b/ruoyi-common/ruoyi-common-mdc/pom.xml new file mode 100644 index 000000000..015b0eae8 --- /dev/null +++ b/ruoyi-common/ruoyi-common-mdc/pom.xml @@ -0,0 +1,33 @@ + + + + org.dromara + ruoyi-common + ${revision} + + 4.0.0 + + ruoyi-common-mdc + + + ruoyi-common-mdc 全局请求id模块 + + + + + + org.dromara.sms4j + sms4j-spring-boot-starter + + + + + org.dromara + ruoyi-common-web + + + + + diff --git a/ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/config/MdcAutoConfiguration.java b/ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/config/MdcAutoConfiguration.java new file mode 100644 index 000000000..b6d126a55 --- /dev/null +++ b/ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/config/MdcAutoConfiguration.java @@ -0,0 +1,25 @@ +package org.dromara.common.mdc.config; + +import org.dromara.common.mdc.filter.RequestIdFilter; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; + +/** + * 短信配置类 + * + * @author Feng + */ +@AutoConfiguration +public class MdcAutoConfiguration { + + @Bean + public FilterRegistrationBean requestIdFilterRegistration(RequestIdFilter requestIdFilter) { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(requestIdFilter); + // 确保是最先执行的过滤器之一 + registration.setOrder(1); + registration.addUrlPatterns("/*"); + return registration; + } +} diff --git a/ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/filter/RequestIdFilter.java b/ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/filter/RequestIdFilter.java new file mode 100644 index 000000000..4e9f98dbc --- /dev/null +++ b/ruoyi-common/ruoyi-common-mdc/src/main/java/org/dromara/common/mdc/filter/RequestIdFilter.java @@ -0,0 +1,60 @@ +package org.dromara.common.mdc.filter; + +import cn.hutool.core.util.StrUtil; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.MDC; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.util.UUID; + +/** + * 请求ID过滤器 + * 为每个HTTP请求生成唯一的请求ID并放入MDC中 + */ +@Component +@Slf4j +public class RequestIdFilter extends OncePerRequestFilter { + + public static final String REQUEST_ID_KEY = "requestId"; + public static final String REQUEST_ID_HEADER = "X-Request-ID"; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + try { + // 尝试从请求头中获取请求ID(支持从上游服务传递过来) + String requestId = request.getHeader(REQUEST_ID_HEADER); + + // 如果请求头中没有请求ID,则生成一个新的 + if (StrUtil.isBlank(requestId)) { + requestId = generateRequestId(); + log.debug("生成新的请求ID: {}", requestId); + // 将请求ID添加到响应头中 + response.addHeader(REQUEST_ID_HEADER, requestId); + } else { + log.debug("从请求头获取到请求ID: {}", requestId); + } + + // 将请求ID放入MDC + MDC.put(REQUEST_ID_KEY, requestId); + // 继续过滤器链 + filterChain.doFilter(request, response); + } finally { + // 清理MDC,防止内存泄漏 + MDC.remove(REQUEST_ID_KEY); + } + } + + /** + * 生成请求ID + */ + private String generateRequestId() { + return UUID.randomUUID().toString().replace("-", ""); + } +} diff --git a/ruoyi-common/ruoyi-common-mdc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-mdc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..0ce3f2c99 --- /dev/null +++ b/ruoyi-common/ruoyi-common-mdc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.dromara.common.mdc.config.MdcAutoConfiguration From d4affa62d87b73c79bf1b8feaa2f4aed4d6c97fb Mon Sep 17 00:00:00 2001 From: heyunfei Date: Sun, 27 Apr 2025 14:59:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=AF=B7=E6=B1=82id=20=20=E6=96=B9=E4=BE=BF=E7=BA=BF=E4=B8=8A?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E6=9F=A5=E8=AF=A2=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/ruoyi-common-mdc/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mdc/pom.xml b/ruoyi-common/ruoyi-common-mdc/pom.xml index 015b0eae8..9e4f37e8a 100644 --- a/ruoyi-common/ruoyi-common-mdc/pom.xml +++ b/ruoyi-common/ruoyi-common-mdc/pom.xml @@ -17,11 +17,6 @@ - - org.dromara.sms4j - sms4j-spring-boot-starter - - org.dromara