尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

后端生成的URL中含base64参数值,经tomcat重定向后偶发前端无法解密报错
📅 发布时间:2026/6/20 16:08:26

现象

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

原因

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

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

处理方案

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

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

Java代码:

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代码:

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) {// 转换为标准Base64const 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配置。

不推荐,可自行搜索。

相关新闻

  • 为什么90%的Open-AutoGLM生物认证项目初期都失败了?真相在这里
  • 【Open-AutoGLM报销提交全攻略】:手把手教你5步高效完成单据提交
  • 【量子-AI协同先锋】:Open-AutoGLM如何重构下一代计算架构?

最新新闻

  • 汽车销售与服务_GEO营销案例实践总结 - 技术瞭望台
  • 闲置购物卡不再“睡大觉”:友谊阿波罗卡正规回收渠道全攻略 - 京顺回收
  • CNN原理与实战:从卷积层计算到工业部署避坑指南
  • Spring AI Alibaba 实战项目-智能聊天助手-4 联网搜索工具实现
  • 5步掌握无名杀武将扩展:从新手到高手的个性化配置指南
  • 2026南宁奢侈品首饰回收行业白皮书:断链旧款奢饰没人收?卡地亚蒂芙尼老旧瑕疵通通回收 - 讯息早知道

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号