@CookieValue
你可以使用 @CookieValue 注解将 HTTP Cookie 的值绑定到控制器的处理方法参数上。
使用示例
假设有如下 Cookie:
text
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84你可以通过以下方式获取它的值:
java
@GetMapping("/demo")
public void handle(@CookieValue("JSESSIONID") String cookie) {
// ...
}kotlin
@GetMapping("/demo")
fun handle(@CookieValue("JSESSIONID") cookie: String) {
// ...
}特性说明
- 自动转换:支持将字符串转换成对应的目标类型。
- 必需性:默认情况下如果 Cookie 不存在会报错。建议使用
defaultValue或required = false(以及Optional)来增加程序的鲁棒性。
补充教学
1. 为什么不用 HttpServletRequest.getCookies()?
直接操作 HttpServletRequest 需要你手动遍历数组、匹配名称并处理 null 情况。 @CookieValue 通过声明式的方式直接帮你完成了这些重复劳动,让代码更聚焦于业务逻辑。
2. 安全建议
虽然能方便地读到 Cookie,但请记住:
- 前端修改:Cookie 是可以被客户端修改的,永远不要根据 Cookie 里的数据(如
userId=123)直接执行危险操作,除非它是经过加密或签名的(如 JWT)。 - HttpOnly/Secure:Spring MVC 只能帮你“读”出 Cookie。在“写”回 Cookie 时,务必通过
Cookie对象的setHttpOnly(true)来防止 XSS 攻击读取你的敏感令牌。