news 2026/7/11 9:23:21

后端生成的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/9 18:03:00

多智能体可信标准在ITU立项:信通院、蚂蚁、中国电信等共同推动

在近日于瑞士日内瓦落幕的国际电信联盟&#xff08;ITU&#xff09;电信标准化部门&#xff08;ITU-T&#xff09;第17研究组会议上&#xff0c;为响应《关于共建终端智能体生态的倡议》&#xff0c;由蚂蚁集团牵头&#xff0c;联合中国信息通信研究院泰尔终端实验室、中国电信…

作者头像 李华
网站建设 2026/7/9 9:24:05

MySQL 查询优化器 (Query Optimizer) 详解

一、MySQL优化器概述 1.1 什么是查询优化器 查询优化器(Query Optimizer)是MySQL的核心组件,负责将SQL语句转换为最优的执行计划。 工作流程: SQL语句 → 解析器(Parser) → 优化器(Optimizer) → 执行器(Executor) → 存储引擎优化器的主要职责: 选择最优的索引确定表的连接顺…

作者头像 李华
网站建设 2026/7/11 4:46:11

FCKEditor支持Word图片上传转存Excel表格图片处理

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

作者头像 李华
网站建设 2026/7/8 18:13:55

FCKEditor解决Word图片粘贴转存政府公文格式问题

.NET CMS企业官网Word导入功能开发实录 需求分析与技术评估 作为吉林的一名.NET程序员&#xff0c;最近接到了一个CMS企业官网的外包项目&#xff0c;客户提出了一个颇具挑战性的需求&#xff1a;在现有新闻管理系统中实现Word/Excel/PPT/PDF文档导入及Word一键粘贴功能。 核…

作者头像 李华