Cookie中存放json字符串异常的解析

有关cookie中存放value值是json字符串引发的exception的问题解析

最近在往cookie的value中存放json字符串,会出现Control character in cookie value or attribute异常或者An invalid character [34] was present in the Cookie value异常等等。。那么该如何解决此类问题呢,下面我们跟随着代码一步步查看下

在我们将String值或者是json字符串存放到cookie的时候都要先经过validateCookieValue这个方法,如下所示

private void validateCookieValue(String value) {

int start = 0;

int end = value.length();



if (end > 1 && value.charAt(0) == '"' && value.charAt(end - 1) == '"') {

start = 1;

end--;

}

char[] chars = value.toCharArray();

for (int i = start; i < end; i++) {

char c = chars[i];

if (c < 0x21 || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c || c == 0x7f) {

throw new IllegalArgumentException(sm.getString(

"rfc6265CookieProcessor.invalidCharInValue", Integer.toString(c)));

}

}

}



我们看一下这个方法,其中在对value值做array处理的时候是验证了其中的每一个字符,其中针对if语句中的则是直接抛出异常,于是就有了我们Control character in cookie value or attribute.其中0x21,0x22是十六进制的表示数字,其中对应的位置分别是33 ,34;

那么问题就来了,为什么当这些字符为0x21,0x22的时候是异常呢?

首先讲一下,cookie包含的编码方式是ASCII吗,那么我们在使用解析的时候则是使用的是GBK或者UTF-8编码;谈到这里,那么问题就来了,ASCII码中0X21,0X22对应的字符是什么,我们需要查一下ASCII码的对照表就可以了,ok,我们下面看一下对应的ASCII表


ASCII.png其中红色的标注的是随意指定的两个,相信大家看了上买你的图之后就清楚为什么报那个异常了;

那么如何解决呢?

在java中提供的有URLEncoder.encode和URLDecoder.decode 两个编解码的方法,这样问题是不是就迎刃而解了,具体如下:

URLEncoder.encode(name, "utf-8");



URLDecoder.decode(cookies[i].getName(),"utf-8")


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值