Java中为什么要将Cookie添加到Response而非Request?
核心逻辑解答
为什么往response写Cookie而不是request?
你对Request、Response Cookie的定义理解完全没错,错的是使用场景的认知:
request是本次浏览器发过来的请求对象,你在服务端给它加任何Cookie、塞任何Attribute,都只在本次请求的服务端内部生效,浏览器完全收不到这些修改,更不可能下次请求自动带过来。- 调用
((HttpServletResponse) response).addCookie(accessTokenCookie)的目的,就是明确告诉浏览器:把这个Token存到你的Cookie里,以后所有发往我这个域名的请求,都自动把这个Token带上,这样后续请求打到服务端时,你才能从request.getCookies()里读到这个Token做鉴权。
既然request.getAttribute已经能拿到Token,为什么还要写response Cookie?
你能从请求属性里拿到Token,通常是两种场景,两种都必须回写Cookie:
- 首次登录/授权场景
这个Token是你本次请求刚生成的(比如账号密码校验通过后生成),你只是临时把它塞到请求属性里给本次请求的后续业务逻辑用,浏览器本地根本还没有存这个Token,必须通过Response Cookie下发给浏览器存下来,不然用户下次刷新页面、新开页面就得重新登录。 - Token续期场景
本次请求浏览器带过来的旧Token快过期了,你在拦截器里校验完旧Token后生成了新的有效Token,先塞到请求属性里给本次业务用,同时要把新Token通过Response Cookie发给浏览器替换旧的,不然等旧Token过期后,用户后续的请求就会被鉴权拦截。
内容的提问来源于stack exchange,提问作者cfoxy17
相关产品推荐
相关产品推荐

