开发避坑指南(8):Java Cookie值非法字符异常分析与解决方案:IllegalArgumentException[32]

异常信息

javajava.lang.IllegalArgumentException: An invalid c0haracter [32] was present in the Cookie value。

异常背景

spring web项目,从tomcat7迁移到tomcat8后运行报错。

异常分析

翻译异常信息:java.lang.IllegalArgumentException: Cookie值中包含非法字符。Cookie值中不允许包含空格等特殊字符,ASCII码32对应空格字符‌。经查阅资料,了解到Tomcat8新增了对HTTP请求头和Cookie值的严格校验,ASCII码32(空格)等特殊字符会被拒绝‌,这与新升级的RFC 6265规范相关‌。常见触发场景‌(1)URL或Cookie值包含空格、花括号等字符‌。(2)时间格式化字符串直接作为Cookie值(如"yyyy-MM-dd HH:mm:ss")‌。
(3)请求头或参数中存在未编码的特殊字符‌。

解决办法

修改tomcat目录下的配置文件\conf\context.xml,指定CookieProcessor为org.apache.tomcat.util.http.LegacyCookieProcessor,具体配置如下:

<Context><CookieProcessor className="org.apache.tomcat.util.http.LegacycookieProcessor"/></context>

CookieProcessor 是 Tomcat 的核心组件,负责解析 HTTP 请求中的 Cookie 头部javax.servlet.http.Cookie 对象,并在响应时将 Cookie 对象转换为标准的 Set-Cookie 头部返回给客户端‌。LegacyCookieProcessor 是 Tomcat 早期版本中用于解析和生成 Cookie 的核心组件,其核心作用主要有:
(1)允许特殊字符‌:与严格遵循 RFC 6265 规范的 Rfc6265CookieProcessor 不同,LegacyCookieProcessor 对 Cookie 值中的特殊字符(如 ‌空格(ASCII 32)、中文、花括号等‌)容忍度更高,不会因这些字符触发 IllegalArgumentException 异常‌。
(2)兼容历史代码‌:适用于从 Tomcat 7 或 8.0 迁移至 Tomcat 8.5+ 时,处理遗留系统中未严格编码的 Cookie 值‌。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帧栈

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值