Skip to content

@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 不存在会报错。建议使用 defaultValuerequired = 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 攻击读取你的敏感令牌。

Based on Spring Framework.