news 2026/9/25 15:39:27

后端生成的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/9/25 3:35:59

破解APP同质化:在“复制风暴”中寻找破局之道

打开应用商店&#xff0c;搜索任意一个关键词&#xff0c;从“记账”到“健身”&#xff0c;从“修图”到“社交”&#xff0c;瞬间弹出几十款图标相似、名称雷同的APP。点开详情页&#xff0c;从界面布局到功能设置&#xff0c;仿佛都出自同一个模板。这已不是简单的市场竞争&…

作者头像 李华
网站建设 2026/9/25 3:35:57

为什么越来越多企业转向Open-AutoGLM?与LoadRunner的4大差异全披露

第一章&#xff1a;Open-AutoGLM兴起的背景与行业趋势随着大语言模型&#xff08;LLM&#xff09;在自然语言理解、代码生成和多模态任务中的广泛应用&#xff0c;企业对自动化机器学习流程的需求日益增长。Open-AutoGLM 的出现正是响应这一趋势的技术产物&#xff0c;旨在通过…

作者头像 李华
网站建设 2026/9/25 15:18:56

Open-AutoGLM报销提交提速80%:自动化流程你真的用对了吗?

第一章&#xff1a;Open-AutoGLM报销单据提交在企业自动化流程中&#xff0c;Open-AutoGLM 是一款基于大语言模型的智能报销处理系统&#xff0c;支持用户通过结构化方式提交报销单据。该系统能够自动识别票据类型、提取关键字段&#xff0c;并完成合规性校验。准备报销数据 提…

作者头像 李华
网站建设 2026/9/25 17:04:33

35、Windows 服务器性能监控与优化指南

Windows 服务器性能监控与优化指南 一、性能瓶颈概述 在服务器管理过程中,管理员常常会遇到服务器性能问题,这些问题可能并非由明显的硬件或服务故障引起。例如,用户可能会抱怨服务器在一天中的某些时段运行缓慢,或者在数周、数月内性能逐渐下降。这种情况下,服务器中存…

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

Open-AutoGLM考勤自动化实战指南(从环境搭建到每日自动签到)

第一章&#xff1a;Open-AutoGLM考勤自动化概述Open-AutoGLM 是一款基于大语言模型与自动化脚本集成的开源工具&#xff0c;专为解决企业日常考勤管理中的重复性任务而设计。它通过自然语言理解能力解析员工提交的出勤信息&#xff0c;并结合规则引擎自动完成打卡记录校验、异常…

作者头像 李华