play2.4报Cookie value contains an invalid char
Play框架Cookie验证问题记录
问题背景
曾在项目中两次遇到Cookie验证异常,忘记记录解决方案导致重复踩坑。现将问题分析过程及解决方法整理如下。
代码分析
在Play框架源码中发现关键验证逻辑:
protected void validateCookie(String var1, String var2) {
if (this.strict) {
int var3;
// 检查 Cookie 名称非法字符
if ((var3 = CookieUtil.firstInvalidCookieNameOctet(var1)) >= 0) {
throw new IllegalArgumentException(
"Cookie name contains an invalid char: " + var1.charAt(var3)
);
}
// 解包 Cookie 值
CharSequence var4 = CookieUtil.unwrapValue(var2);
if (var4 == null) {
throw new IllegalArgumentException(
"Cookie value wrapping quotes are not balanced: " + var2
);
}
// 验证 Cookie 值非法字符
if ((var3 = CookieUtil.firstInvalidCookieValueOctet(var4)) >= 0) {
throw new IllegalArgumentException(
"Cookie value contains an invalid char: " + var2.charAt(var3)
);
}
}
}关键点说明:
strict模式开关控制验证逻辑验证内容包含:
- Cookie名称非法字符校验
- Cookie值格式校验(是否带双引号)
- Cookie值非法字符校验
解决方案
配置修改
在application.conf中关闭严格模式:
play.http.cookies.strict=false修改说明
- 该配置项控制Cookie验证开关
修改后框架将跳过:
- 名称非法字符检查
- 值格式双引号检查
- 值内容非法字符检查
适用场景建议
⚠️ 注意事项:
关闭严格模式会降低Cookie安全性,建议仅在以下情况使用:
- 需要兼容遗留系统特殊Cookie格式
- 测试环境临时调试
- 确认有前置代理完成校验
生产环境建议保持strict=true以保障安全性,可通过预处理Cookie数据满足验证要求。