1. 问题背景
- 点餐后勤端是一个 前后端分离项目;
- 前端是Vue2.0,后端是SpringBoot、SpringSecurity;
- 前端本地开发联调,请求链路
前端本地(http)启动------>Vue Proxy(解决跨域)------>华为云ELB------>后端manage(https)
说明:
近期后端进行容器化&CICD改造,将后端相关服务从 【华为云ECS】迁移到了【华为云CCE容器】。此次改造仅涉及后端服务部署方式,代码均为改动。
前端开发发现,之前ECS方式 Set-Cookie可以正常生效,迁移后的CCE方式 Set-Cookie不生效,并且手动显式设置也不行。
2.原因
前端请求登录接口/dologinmng成功后,请求响应头Set-Cookie:SESSION 有Secure属性,导致无法设置Cookie。
说明:
【华为云ECS】没有Secure属性;
【华为云CCE容器】有Secure属性。
3.解决
-
前端本地请求设置https---已解决;
后端公测将Set-Cookie:SESSION 对应设置的Secure属性移除掉---待定位具体源码。
问题思考: 为什么正式ECS也是https443 ELB负载,Set-Cookie却没有Secure属性,按理来说应该也有Secure属性才对?
Set-Cookie:SESSION 是SpringSecurity的自动行为。
当Spring Security自动判断是否应该设置Secure属性时,它通常会检查以下几个方面:1> 应用配置中的HTTPS设置:如果你在应用的配置中明确指定了只能通过HTTPS提供服务,Spring Security将会自动设置Secure属性。例如,在Spring Boot应用中,你可以在application.properties或application.yml文件中配置server.ssl.enabled=true来启用HTTPS。2> 安全通道的检测:Spring Security会检测当前请求的通道是否安全。如果请求是通过HTTPS连接到达的,它会自动设置Secure属性;而如果请求是通过不安全的HTTP连接到达的,则不会设置Secure属性。3> 环境变量:有些部署环境可能会在运行时提供关于安全连接的信息,例如在云平台或者负载均衡器上。Spring Security可以利用这些信息来决定是否设置Secure属性。
4.反思
- 要自己梳理下问题的始末,有全局的了解。
- 不要拿来主义,对别人的结论,多问一句:“你说的结论能证明吗?”