You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Reactive中ServerWebExchange无法读取带Secure标识Cookie如何解决

核心原因

Secure 是Cookie的标准安全属性,标记为该属性的Cookie仅会通过HTTPS协议加密传输,默认规则下:

  1. 客户端(Postman、浏览器等)不会在HTTP请求中携带标记为Secure的Cookie
  2. Spring WebFlux默认不会在HTTP连接下解析标记为Secure的Cookie,因此你无法从ServerWebExchange中读取对应值
    你的控制器代码本身没有逻辑问题,该现象是Secure属性的规则限制导致。
本地环境解决方案

以下方案均可在保留Cookie Secure属性的前提下,实现本地Postman调用正常读取Cookie:

  • 方案1:本地服务启用HTTPS(最贴近生产环境的方案)
    1. 生成自签名SSL证书,可通过JDK自带的keytool工具生成PKCS12格式证书
    2. 在项目配置文件中添加HTTPS配置:
    server:
      ssl:
        enabled: true
        key-store: classpath:keystore.p12
        key-store-password: 你的证书密码
        key-store-type: PKCS12
        key-alias: 你的证书别名
    
    1. Postman改为使用https://localhost:端口的地址发起请求,同时在Postman设置中关闭SSL certificate verification开关(适配自签名证书)即可正常调用。
  • 方案2:修改本地开发配置兼容HTTP读取Secure Cookie(仅本地开发使用,禁止生产环境配置)
    在本地开发专用的配置文件中添加如下配置,允许Spring WebFlux在HTTP环境下处理Secure Cookie:
    spring:
      webflux:
        session:
          cookie:
            secure: true
            use-secure-cookie-if-supported: false
    
    配置后无需修改其他逻辑,原有HTTP调用即可正常读取带Secure属性的Cookie。
  • 方案3:Postman强制携带Secure Cookie(无需修改服务端配置)
    在Postman对应请求的Pre-request Script栏添加如下脚本,强制在请求头中携带Cookie:
    pm.request.headers.add({
      key: 'Cookie',
      value: `SESSION=${pm.environment.get("sid")}; Path=/; Secure; HttpOnly;`
    });
    
    同时在Postman设置中开启Include secure cookies for localhost选项,即可在HTTP请求下强制携带并被服务端识别。

内容的提问来源于stack exchange,提问作者hakansander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:45:00