news 2026/4/16 11:04:43

后端生成的URL中含base64参数值,经tomcat重定向后偶发前端无法解密报错

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后端生成的URL中含base64参数值,经tomcat重定向后偶发前端无法解密报错

现象

最近定位到一个有意思的bug,后端生成的URL中包含base64参数值后,经过tomcat重定向后,偶发出现前端无法解密的现象。

原因

当出现问题时,经排查发现重定向的Location响应头中把+转成了英文空格,导致解密失败。

重定向时如果特殊字符未经URLEncode转义,则tomcat会把+转换成英文空格。

处理方案

方案1、对Base64参数值进行UrlEncode。推荐

此方案会将所有特殊符号替换成%数字字母格式,如%2B,最后一个字母大小写不敏感。

Java代码:

/* by yours.tools - online tools website : yours.tools/zh/textdiff.html */ String plainText = "hello>"; String encodedText = Base64.getEncoder().encodeToString(plainText.getBytes(StandardCharsets.UTF_8)); String urlEncodedText = URLEncoder.encode(url, StandardCharsets.UTF_8.toString()); response.sendRedirect("http://127.0.0.1:8080/test?encode=" + urlEncodedText); //http://127.0.0.1:8080/test?encode=aGVsbG8%2B

JavaScript代码:

/* by yours.tools - online tools website : yours.tools/zh/textdiff.html */ const encode = 'aGVsbG8%2B' const decode = atob(decodeURIComponent(encode)) console.log(decode) //hello>

方案2、Base64使用UrlEncoder进行加密。需前端配合

基于2006年的RFC规范:RFC4648 URL安全字符串替换(+替换成-/替换成_

前端的JS方法atob()btoa()首个版本即支持;ECMAScript 2024+的Uint8Array.fromBase64()也是支持的。

Java代码:

String plainText = "hello>"; String encodedText = Base64.getUrlEncoder().encodeToString(plainText.getBytes(StandardCharsets.UTF_8)); response.sendRedirect("http://127.0.0.1:8080/test?encode=" + encodedText); //http://127.0.0.1:8080/test?encode=aGVsbG8-

JavaScript代码:

//写法1:替换回-为+,_为/,补全=,使用atob()完成base64解密 const encodeText = 'aGVsbG8-' let encode = encodeText.replace(/-/g, '+') .replace(/_/g, '/') .padEnd(encodeText.length + (4 - encodeText.length % 4) % 4, '='); const result = atob(decodeURIComponent(encode)) console.log(result) //写法2:替换后使用TextDecoder解密 <script src="https://unpkg.com/base64-js/base64js.min.js"></script> <script> function decodeBase64Url(base64UrlString) { // 转换为标准Base64 const base64 = base64UrlString .replace(/-/g, '+') .replace(/_/g, '/') .padEnd(base64UrlString.length + (4 - base64UrlString.length % 4) % 4, '='); // 解码 const byteArray = base64js.toByteArray(base64); return new TextDecoder().decode(byteArray); } console.log(decodeBase64Url('aGVsbG8-')) </script>

方案3、调整tomcat配置

不推荐,可自行搜索。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 14:44:41

Open-AutoGLM与NeoLoad性能测试差异全解析(企业级压测选型必读)

第一章&#xff1a;Open-AutoGLM与NeoLoad性能测试差异全解析在现代自动化负载测试领域&#xff0c;Open-AutoGLM 与 NeoLoad 作为两类典型工具&#xff0c;分别代表了开源可编程框架与商业一体化平台的发展方向。两者在架构设计、扩展能力及适用场景上存在显著差异&#xff0c…

作者头像 李华
网站建设 2026/4/16 9:22:52

模型压缩难、部署慢?Open-AutoGLM轻量协同方案,3步搞定千亿参数优化

第一章&#xff1a;模型压缩难、部署慢&#xff1f;Open-AutoGLM轻量协同方案&#xff0c;3步搞定千亿参数优化 在大模型时代&#xff0c;千亿参数级别的语言模型虽具备强大推理能力&#xff0c;但其高资源消耗和缓慢部署效率严重制约了实际落地。Open-AutoGLM 提供了一套轻量级…

作者头像 李华
网站建设 2026/4/16 9:23:42

AI营销辅助决策系统:让数据替营销人“精准导航”

营销决策最怕什么&#xff1f;凭经验拍板导致预算浪费&#xff0c;靠感觉投放错失精准客群。如今&#xff0c;AI营销辅助决策系统正在用技术打破这种困境——它就像营销人的“智能导航仪”&#xff0c;通过数据处理、算法建模等核心技术&#xff0c;把模糊的市场需求、分散的用…

作者头像 李华
网站建设 2026/4/16 9:24:27

FCKEditor支持Word图片上传转存跨平台兼容性处理

&#x1f468;&#x1f4bb; Word图片一键转存功能开发日记 &#x1f50d; 寻找解决方案的漫漫长路 作为一个即将毕业的吉林软件工程专业大三学生&#xff0c;我最近在给我的CMS新闻管理系统添加一个超实用的功能 - Word文档一键粘贴并自动上传图片&#xff01;这简直是内容编…

作者头像 李华
网站建设 2026/4/16 9:23:05

Open-AutoGLM与LoadRunner负载测试全面解析(20年专家亲测数据)

第一章&#xff1a;Open-AutoGLM与LoadRunner负载测试全面解析在现代软件性能工程中&#xff0c;自动化测试工具与智能语言模型的融合正成为提升测试效率的关键路径。Open-AutoGLM 作为基于开源大语言模型的自动化测试生成框架&#xff0c;能够理解自然语言指令并自动生成符合 …

作者头像 李华
网站建设 2026/4/16 11:03:36

Open-AutoGLM认证异常深度解析(专家级故障排查手册)

第一章&#xff1a;Open-AutoGLM认证失败处理优化在使用 Open-AutoGLM 框架进行自动化任务调度时&#xff0c;认证失败是常见问题之一&#xff0c;可能由令牌过期、权限不足或网络中断引发。为提升系统的健壮性&#xff0c;需对认证失败场景进行精细化处理。错误类型识别 常见的…

作者头像 李华