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

xiaoxiao2021-02-28  111

有关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表

其中红色的标注的是随意指定的两个,相信大家看了上买你的图之后就清楚为什么报那个异常了; 那么如何解决呢? 在java中提供的有URLEncoder.encode和URLDecoder.decode 两个编解码的方法,这样问题是不是就迎刃而解了,具体如下: URLEncoder.encode(name, "utf-8"); URLDecoder.decode(cookies[i].getName(),"utf-8")

转载请注明原文地址: https://www.6miu.com/read-51229.html

最新回复(0)