当前位置: 首页 > news >正文

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

现象

最近定位到一个有意思的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配置

不推荐,可自行搜索。

http://www.jsqmd.com/news/123202/

相关文章:

  • 如何甄别智能客服机器人的真实效能?2025年年终最新技术评测与5家服务商专业推荐 - 十大品牌推荐
  • 常熟市东方红木家俱有限公司的产品好不好?客服服务周到吗? - mypinpai
  • AI工具实战测评:效率与性能大比拼
  • 为什么90%的Open-AutoGLM生物认证项目初期都失败了?真相在这里
  • 710度VR全景商业化源码系统,三端分离架构,快速生成
  • 享元模式深度解析:看Java如何优雅节省内存
  • 英文文献检索实用指南:高效策略与技巧解析
  • 【Open-AutoGLM报销提交全攻略】:手把手教你5步高效完成单据提交
  • Open-AutoGLM弹窗修复仅需1次重启?别再被误导!真正解决方案在这里
  • 2025工厂短视频宣传服务机构TOP5权威推荐:甄选优质服务商助力工厂品牌破圈 - myqiye
  • 【紧急预警】Open-AutoGLM最新版本弹窗Bug已爆发!速看官方未公布的修复补丁
  • 【量子-AI协同先锋】:Open-AutoGLM如何重构下一代计算架构?
  • 为什么头部企业都在悄悄布局Open-AutoGLM发票自动化?真相终于曝光
  • 游戏策划圣体:成为顶尖游戏策划的30项核心条件;什么样的人能成为最顶尖的游戏策划?
  • LangFlow社区资源汇总:文档、插件与第三方扩展推荐
  • 2025年江西水上游乐设备公司推荐,江西昱浩科技性价比怎样? - 工业推荐榜
  • 10 个AI论文工具,MBA轻松搞定毕业论文!
  • 【企业级安全合规必备】:Open-AutoGLM生物认证配置必须掌握的4项标准
  • 3步搞定Open-AutoGLM 5G部署难题,90%工程师不知道的配置技巧
  • 2025西餐培训学校TOP5权威推荐:甄选专业机构助力餐饮人才成长 - 工业推荐榜
  • 2025年年终智能客服机器人服务商推荐:从用户口碑到服务可持续性的全方位评估,附不同规模企业适配指南 - 十大品牌推荐
  • 2025 年 12 月模具厂家权威推荐榜:螺母/紧固件/螺丝/钛合金/冷镦/热镦/钨钢/合金/多工位/银触点模具,精工智造与耐用典范之选 - 品牌企业推荐师(官方)
  • 【6G预研决胜点】:Open-AutoGLM模型轻量化适配的7步实战法
  • 生物识别安全升级迫在眉睫,Open-AutoGLM适配你真的会吗?
  • LangFlow开源项目部署步骤详解(含Docker镜像)
  • 为什么全球顶尖实验室都在关注Open-AutoGLM与6G融合?(独家深度分析)
  • Open-AutoGLM集成常见故障,弹窗无法关闭的应急处理与根治方案
  • 2025 年 12 月破碎机厂家权威推荐榜:移动/履带式/重型卡车式等全系列硬核装备实力解析与选购指南 - 品牌企业推荐师(官方)
  • Open-AutoGLM 5G网络自适应增强(稀缺架构设计细节流出)
  • 2025年年终智能客服机器人服务商推荐:从核心技术到服务生态全方位对比,5款市场表现突出型号清单 - 十大品牌推荐