news 2026/7/7 9:09:58

后端生成的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/7/7 12:40:57

Open-AutoGLM实战案例分享:某头部险企投保周期缩短至90秒

第一章&#xff1a;Open-AutoGLM实战背景与行业价值在人工智能技术快速演进的背景下&#xff0c;大语言模型&#xff08;LLM&#xff09;正逐步成为推动企业智能化转型的核心引擎。Open-AutoGLM作为一款开源的自动化生成语言模型框架&#xff0c;融合了自然语言理解、任务自动分…

作者头像 李华
网站建设 2026/7/7 8:07:19

Open-AutoGLM vs NeoLoad:谁才是高并发测试的终极答案?

第一章&#xff1a;Open-AutoGLM vs NeoLoad&#xff1a;高并发测试的终极之争 在高并发性能测试领域&#xff0c;自动化工具的选择直接影响系统稳定性验证的效率与准确性。Open-AutoGLM 作为新兴开源框架&#xff0c;凭借其基于大语言模型的智能脚本生成能力&#xff0c;正在挑…

作者头像 李华
网站建设 2026/7/7 7:30:43

LoadRunner即将被淘汰?Open-AutoGLM崛起背后的真相,你不可不知

第一章&#xff1a;LoadRunner即将被淘汰&#xff1f;行业变革的信号性能测试工具领域正经历深刻变革&#xff0c;曾经占据主导地位的LoadRunner是否已走到技术生命周期的尾声&#xff0c;成为业界热议的话题。随着开源生态和云原生架构的崛起&#xff0c;企业对测试工具的灵活…

作者头像 李华
网站建设 2026/7/7 3:28:01

34、Windows Server 2016备份与监控全攻略

Windows Server 2016备份与监控全攻略 1. 备份驱动器选择 在进行备份时,可选择的备份驱动器有以下几种: 1. 磁带驱动器 2. 内部磁盘驱动器 3. 外部硬盘驱动器 4. 远程网络共享 需要注意的是,Windows Server Backup不支持磁带驱动器,但可以备份到内部或外部磁盘驱动器…

作者头像 李华
网站建设 2026/7/7 16:01:15

【负载测试工具选型指南】:Open-AutoGLM与LoadRunner谁更胜一筹?

第一章&#xff1a;负载测试工具选型的核心挑战在构建高可用、高性能的现代应用系统时&#xff0c;负载测试是验证系统稳定性和扩展能力的关键环节。然而&#xff0c;面对多样化的业务场景和技术栈&#xff0c;选择合适的负载测试工具成为开发与运维团队面临的重要挑战。性能需…

作者头像 李华