From 21eecdc76053680eaa51b1ccd9a6b3e63ecfb1dd Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 16 Jan 2023 10:17:51 +0800 Subject: [PATCH] =?UTF-8?q?ServletUtil=E9=81=B5=E5=BE=AArfc=203986?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../java/cn/hutool/extra/servlet/JakartaServletUtil.java | 5 +++-- .../src/main/java/cn/hutool/extra/servlet/ServletUtil.java | 5 +++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d9b0f279..12df5ed84 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,14 @@ ------------------------------------------------------------------------------------------------------------- -# 5.8.12.M1 (2023-01-15) +# 5.8.12.M1 (2023-01-16) ### 🐣新特性 * 【core 】 XmlUtil.readObjectFromXml增加注入漏洞的警告注释,并标识为废弃(issue#2857@Github) * 【http 】 HttpGlobalConfig.allowPatch()调用时忽略错误(issue#2832@Github) * 【core 】 重构根据file magic number判断文件类型(pr#2834@Github) * 【core 】 增加WGS84 坐标与墨卡托投影互转(pr#2811@Github) +* 【extra 】 ServletUtil遵循rfc 3986优化(issue#I6ALAO@Gitee) ### 🐞Bug修复 * 【core 】 修复HexUtil.isHexNumber()对"-"的判断问题(issue#2857@Github) diff --git a/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java index fa38b2911..b654240f3 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/servlet/JakartaServletUtil.java @@ -614,8 +614,9 @@ public class JakartaServletUtil { */ public static void write(HttpServletResponse response, InputStream in, String contentType, String fileName) { final String charset = ObjectUtil.defaultIfNull(response.getCharacterEncoding(), CharsetUtil.UTF_8); - response.setHeader("Content-Disposition", StrUtil.format("attachment;filename=\"{}\"", - URLUtil.encode(fileName, CharsetUtil.charset(charset)))); + final String encodeText = URLUtil.encodeAll(fileName, CharsetUtil.charset(charset)); + response.setHeader("Content-Disposition", + StrUtil.format("attachment;filename=\"{}\";filename*={}''{}", encodeText, charset, encodeText)); response.setContentType(contentType); write(response, in); } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java index 7d5a7f7d2..aad7cda9c 100755 --- a/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/servlet/ServletUtil.java @@ -613,8 +613,9 @@ public class ServletUtil { */ public static void write(HttpServletResponse response, InputStream in, String contentType, String fileName) { final String charset = ObjectUtil.defaultIfNull(response.getCharacterEncoding(), CharsetUtil.UTF_8); - response.setHeader("Content-Disposition", StrUtil.format("attachment;filename=\"{}\"", - URLUtil.encode(fileName, CharsetUtil.charset(charset)))); + final String encodeText = URLUtil.encodeAll(fileName, CharsetUtil.charset(charset)); + response.setHeader("Content-Disposition", + StrUtil.format("attachment;filename=\"{}\";filename*={}''{}", encodeText, charset, encodeText)); response.setContentType(contentType); write(response, in); }