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

绑定AWS Elastic Beanstalk的自定义域名无法保存登录Cookie问题

问题核心

通过自定义域名www.my-custom-domain.com访问时,登录Cookie无法被浏览器保存,但Elastic Beanstalk实例域名(my-custom-domain.aws-region.elasticbeanstalk.com)下一切正常。问题根源在于Cookie的domain属性未正确适配请求域名,且HTTP环境下误用SameSite=None导致兼容性问题。


解决方案

1. 动态设置Cookie的Domain属性

当前代码未指定domain,浏览器会默认绑定请求的实例域名,导致自定义域名无法识别该Cookie。需根据请求的实际域名动态设置:

// 获取当前请求的域名
String requestDomain = request.getServerName();

ResponseCookie cookie = ResponseCookie.from("accessToken", logInDTO.getJwt())
        .httpOnly(true)
        .secure(false)
        .path("/")
        .maxAge(1800)
        .domain(requestDomain) // 绑定当前请求的域名
        .sameSite("Lax") // HTTP环境仅支持Lax/Strict,None仅HTTPS可用
        .build();

HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.set(HttpHeaders.SET_COOKIE, cookie.toString());

注意:若自定义域名与实例域名不属于同一主域,必须将domain设置为完整的请求域名(如www.my-custom-domain.com或实例域名),不能用顶级域。

2. 确认CORS配置匹配请求Origin

确保AllowedOrigins包含前端请求的完整Origin(协议+域名),且allowCredentials=true时不能使用通配符*。当前配置已包含http://www.my-custom-domain.com,需验证前端请求的Origin是否完全匹配(无多余端口或路径)。

3. 移除HTTP环境下的SameSite=None

浏览器在HTTP环境会直接拒绝带有SameSite=None的Cookie,这也是你添加该配置后实例域名失效的原因。HTTP环境保持默认的SameSite=Lax即可。

4. 检查AWS配置是否存在跳转问题

  • 确认Route 53的A类型别名记录未触发301/302重定向,重定向会导致Cookie丢失
  • 若Elastic Beanstalk使用负载均衡,确保负载均衡正确传递Host请求头,Cookie的domain解析依赖该头信息

验证步骤

  1. 登录请求后,打开浏览器开发者工具→Application→Cookies,检查accessToken是否存在
  2. 查看响应头的Set-Cookie字段,确认Domain属性与当前访问域名一致
  3. 确认请求头的Origin与CORS配置的AllowedOrigins完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:07:06