From 970722d9b1f93cc0ba41e5a8c9c5b5a1b0a17196 Mon Sep 17 00:00:00 2001 From: "housewu@aslcn.com.cn" Date: Sat, 15 Mar 2025 19:38:26 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BA=86permit-all=5Furls=3D?= =?UTF-8?q?/**=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E5=BD=93=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=8F=91=E7=94=9F=E5=9C=A8Servlet=EF=BC=88eg=EF=BC=9A?= =?UTF-8?q?TokenAuthenticationFilter=EF=BC=8CxxxFilter=EF=BC=89=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=20=E4=BB=A3=E7=A0=81=E8=BF=9B=E5=85=A5=E5=88=B0=20Api?= =?UTF-8?q?AccessLogInterceptor=20=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C?= =?UTF-8?q?=E6=8B=BF=E5=88=B0=E7=9A=84=E6=98=AF=E5=8E=9F=E5=A7=8B=E7=9A=84?= =?UTF-8?q?request=E8=80=8C=E4=B8=8D=E6=98=AFCacheRequestBodyWrapper?= =?UTF-8?q?=EF=BC=8C=E8=BF=99=E6=97=B6=E5=80=99=E4=B8=8D=E8=83=BD=20getBod?= =?UTF-8?q?y=20from=20request=EF=BC=8C=20=E5=90=A6=E5=88=99=E4=BC=9A?= =?UTF-8?q?=E6=8A=9B=E5=BC=82=E5=B8=B8=20request=20=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?=E8=A2=AB=E6=B6=88=E8=B4=B9=E6=88=96=E8=80=85=E6=B5=81=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E8=A2=AB=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/framework/common/util/servlet/ServletUtils.java | 6 ++++++ .../framework/web/core/filter/CacheRequestBodyFilter.java | 5 ++++- .../web/core/filter/CacheRequestBodyWrapper.java | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java index 12731edad6..4d6f3cae36 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java @@ -77,6 +77,12 @@ public class ServletUtils { public static String getBody(HttpServletRequest request) { // 只有在 json 请求在读取,因为只有 CacheRequestBodyFilter 才会进行缓存,支持重复读取 if (isJsonRequest(request)) { + // 优先从请求属性中获取缓存的请求体 + String body = (String) request.getAttribute("cache_body"); + if (StrUtil.isNotEmpty(body)) { + return body; + } + return JakartaServletUtil.getBody(request); } return null; diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyFilter.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyFilter.java index 9071998f91..9c867494c1 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyFilter.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyFilter.java @@ -19,7 +19,10 @@ public class CacheRequestBodyFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException { - filterChain.doFilter(new CacheRequestBodyWrapper(request), response); + CacheRequestBodyWrapper cacheRequestBodyWrapper = new CacheRequestBodyWrapper(request); + String body = ServletUtils.getBody(cacheRequestBodyWrapper); + request.setAttribute(CacheRequestBodyWrapper.CACHE_BODY, body); + filterChain.doFilter(cacheRequestBodyWrapper, response); } @Override diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyWrapper.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyWrapper.java index 8e80fa591f..775ee91d30 100644 --- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyWrapper.java +++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/CacheRequestBodyWrapper.java @@ -18,6 +18,11 @@ import java.io.InputStreamReader; */ public class CacheRequestBodyWrapper extends HttpServletRequestWrapper { + /** + * 缓存在 request.attribute 的 body + */ + public static final String CACHE_BODY = "cache_body"; + /** * 缓存的内容 */ @@ -26,6 +31,9 @@ public class CacheRequestBodyWrapper extends HttpServletRequestWrapper { public CacheRequestBodyWrapper(HttpServletRequest request) { super(request); body = ServletUtils.getBodyBytes(request); + if (body != null) { + request.setAttribute(CacheRequestBodyWrapper.CACHE_BODY, new String(body)); + } } @Override