情景再现:
我的功能是写图灵验证码的key以前是存redis,现在存到cookie,不需要前端传时间戳,不然前端每刷新一次就会在redis生成一条验证码的key,造成资源浪费,存cookie的话,不管怎么刷新都只有一条,还有就是防止同一秒请求同一个key。
我一顿操作猛如虎,很快就改好了,我是在返回图片流的后面写的cookie(伏笔),然后发现怎么写都写不了cookie,我很纳闷,我以前写token也是这样写的,怎么这次就会写不了了呢,我反复检测我的代码,然后重启试了好几次,也从网上找了答案,都是没有任何的效果,差点就准备放弃还原了。
代码
Captcha targetCaptcha = null;
// 输出图片流
targetCaptcha.out(getResponse().getOutputStream());
CookieUtils.setUpCookie(getResponse(), Constant.User.LAST_CAPTCHA_KEY, key);
这就是我犯错的代码,写bug的你有没有看出端倪来,或许是我技术还是太浅薄了,以至于犯这么低级的错误。
解决办法
Captcha targetCaptcha = null;
CookieUtils.setUpCookie(getResponse(), Constant.User.LAST_CAPTCHA_KEY, key);
// 输出图片流, 这之后尽量不再有流的操作
targetCaptcha.out(getResponse().getOutputStream());
就是一句代码的顺序,找了我两三个小时,搞的头大了。
注意:流out之后就不要再有流的操作了,要操作也是在这之前操作完。
深夜了,可能是程序员优秀品质,坚持到底,深夜了,终于搞完了,洗澡睡觉吧。2021-06-27 02:00:00