为何Spring Security中DefaultSavedRequest的headers用List<String>而非String?
为什么DefaultSavedRequest的headers使用List而非String?
这其实是为了严格遵循HTTP协议的规范,同时保证请求信息的完整还原,我来给你拆解下:
HTTP请求头允许同一个字段存在多个值。比如常见的
Accept、Cookie、X-Forwarded-For这些头,都可能携带多个值。举个例子,一个请求可能同时发送两个X-Custom-Token头,或者Accept头用逗号分隔多个媒体类型(本质上也是多值的一种表现)。如果用String来存,要么会覆盖之前的值,要么只能把多个值拼接成一个字符串,这两种方式都会破坏原始请求的完整性。DefaultSavedRequest的核心作用是保存用户登录前的请求状态,等用户认证通过后再精确重定向回原来的请求场景。为了让重定向后的请求和原始请求完全一致,必须完整保留所有请求头的细节——包括同一个头的多个值。用List<String>就能完美存储这种多值的情况,后续还原请求时可以准确地把所有头信息重新添加到请求中。
举个简单的场景:假设用户访问某个需要登录的页面时,请求里带了两个X-User-Permission头,值分别是read和write。如果用String存储,最终只能保留其中一个;而用List<String>就能把两个值都存下来,登录后重定向时,这两个权限头会被完整还原,后端服务就能正确识别用户的权限了。
内容的提问来源于stack exchange,提问作者devsh
相关产品推荐
相关产品推荐

