Http 使用Java在cookie中存储压缩的JWT
我使用JavaServlet将带有JWT信息的cookie返回给客户端 我还了两块饼干 1=>Token\u id,此cookie存储id\u令牌 2=>refresh_令牌,此令牌存储令牌过期时要发送的刷新令牌 问题是,这些信息太大,因此浏览器会发送以下错误: 431(请求标头字段太大) 为了解决这个问题,我想将refresh_令牌存储为压缩的,当我使用这个信息时,我会解压缩 我阅读了有关压缩的内容,并尝试使用GZIPCompress字符串,如下所示:Http 使用Java在cookie中存储压缩的JWT,http,servlets,cookies,jwt,Http,Servlets,Cookies,Jwt,我使用JavaServlet将带有JWT信息的cookie返回给客户端 我还了两块饼干 1=>Token\u id,此cookie存储id\u令牌 2=>refresh_令牌,此令牌存储令牌过期时要发送的刷新令牌 问题是,这些信息太大,因此浏览器会发送以下错误: 431(请求标头字段太大) 为了解决这个问题,我想将refresh_令牌存储为压缩的,当我使用这个信息时,我会解压缩 我阅读了有关压缩的内容,并尝试使用GZIPCompress字符串,如下所示: public static Strin
public static String compress(final String str) throws IOException {
if ((str == null) || (str.length() == 0)) {
return null;
}
ByteArrayOutputStream obj = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(obj);
gzip.write(str.getBytes("UTF-8"));
gzip.flush();
gzip.close();
return obj.toString();
}
当我将压缩字符串添加到cookie时,出现以下异常:
Illegal character in cookie value
我无法在服务器中存储刷新令牌。
如何压缩一个大字符串以存储在cookie中?我需要减小值cookie的大小。cookie只能存储字符串,但您正在存储二进制数据 压缩过程的结果是二进制的,即使调用
obj.toString(),也不能用字符串表示代码>。您需要将结果编码为base64,以获得可以存储在cookie中的字符串,但是base64会将大小增加约30%,因此我不知道这在您的情况下是否有意义
//storage
cookie = base64(gzip(str))
//retrieval
str = gunzip(base64decode(cookie))
刷新令牌通常包含在随机字符串中。可能是您包含的数据太多了 是的@pedrofb,我的数据太大了。我想压缩字符串的大小,但我知道我需要在cookie文件中存储一个字符串。你知道有没有什么方法可以将长字符串改为短字符串,并将其改为原始字符串?大多数浏览器支持最多4096字节的cookie。不算太多。我建议您使用localStorage而不是Cookie,根据浏览器的不同,您将拥有5到10 mb的空间。您可能不需要压缩已使用的localStorage,我不会关闭该主题,因为它的主要主题是减小字符串的大小。