news 2026/5/1 4:58:30

后端生成的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/5/1 3:50:04

从训练到推理全面提速(Open-AutoGLM轻量协同实战指南)

第一章&#xff1a;从训练到推理全面提速——Open-AutoGLM轻量协同概览Open-AutoGLM 是新一代轻量级自动化生成语言模型框架&#xff0c;专为高效训练与低延迟推理设计。其核心理念在于通过模型压缩、动态计算图优化与硬件感知调度的协同机制&#xff0c;显著降低资源消耗的同时…

作者头像 李华
网站建设 2026/5/1 3:49:40

【大模型工业级部署必看】:Open-AutoGLM实现90%压缩率的5大关键技术

第一章&#xff1a;Open-AutoGLM大模型轻量化协同概述随着大规模语言模型在自然语言处理任务中的广泛应用&#xff0c;模型的参数量急剧增长&#xff0c;导致推理延迟高、部署成本大等问题日益突出。Open-AutoGLM 作为一种面向 GLM 架构的大模型轻量化协同框架&#xff0c;旨在…

作者头像 李华
网站建设 2026/5/1 3:51:10

揭秘Open-AutoGLM底层逻辑:5步实现保险投保零误差自动化

第一章&#xff1a;Open-AutoGLM驱动保险投保自动化的变革在数字化转型浪潮中&#xff0c;保险行业正面临流程冗长、人工核保效率低下的挑战。Open-AutoGLM作为一种基于开源大语言模型的自动化推理引擎&#xff0c;正在重塑投保流程的智能化水平。通过理解非结构化客户输入、自…

作者头像 李华
网站建设 2026/5/1 3:51:06

可以指定端口启动本地前端的npm包

http-server 是一个可以直接指定端口启动本地静态服务器的 npm 包&#xff0c;但它只是选项之一。以下是详细对比&#xff1a; &#x1f4e6; 主要选择 1. http-server # 全局安装 npm install -g http-server# 启动&#xff08;默认端口 8080&#xff09; http-server# 指定端…

作者头像 李华
网站建设 2026/5/1 3:49:53

大模型轻量化新突破(Open-AutoGLM协同优化全解析)

第一章&#xff1a;大模型轻量化新突破&#xff08;Open-AutoGLM协同优化全解析&#xff09; 随着大语言模型规模持续膨胀&#xff0c;部署与推理成本成为实际应用中的关键瓶颈。Open-AutoGLM 作为新一代开源自动轻量化框架&#xff0c;通过协同优化策略实现了精度与效率的双重…

作者头像 李华
网站建设 2026/5/1 3:51:01

【保险智能化转型必读】:Open-AutoGLM如何重构投保体验?

第一章&#xff1a;保险智能化转型的背景与Open-AutoGLM的崛起随着大数据、人工智能和云计算技术的迅猛发展&#xff0c;传统保险行业正面临深刻的智能化转型。客户行为分析、风险评估自动化、智能核保与理赔等场景对高效、可扩展的AI模型提出了迫切需求。在此背景下&#xff0…

作者头像 李华