概述
两个服务,分别为接口提供服务api-service和gateway。
直接调用api-service时,通过response.addCookie()设置Cookie后:
Cookie cookie = new Cookie(cookieName, cookieValue);
cookie.setMaxAge(cookieMaxAge);
cookie.setPath("/");
cookie.setDomain(request.getServerName());
response.addCookie(cookie);
postman会成功设置Cookie,如图:
但是如果通过gateway调用api-service,则Cookie无法设置成功。
原因如下:
服务注册到Nacos上,Nacos默认提供服务的IP地址。直接访问api-service时,request.getServerName()时,得到的是localhost,但是通过gateway访问时,如果访问地址依然写localhost,gateway去Nacos找api-service找到的却是IP地址,之后在给Cookie设置domain时,request.getServerName()得到的是api-service的IP,将Cookie添加到response后,Cookie是无法设置到域名为localhost的postman客户端的。除非通过gateway调用的时候,域名不写localhost而是直接写IP地址。
解决方法有几个:
1、访问时直接调用IP地址,这个方法不能一直用,部署到生产肯定要走域名的;
2、设置Cookie时不设置domain,这样Cookie是可以正常设置回客户端的;
3、服务注册到Nacos时,设置IP为域名,这样gateway在请求api-service时就会通过域名请求,Cookie自然也就可以设置成功了。
服务注册到Nacos时,将IP设置为域名的方法如下:
在要注册到Nacos的服务中添加配置:
@Configuration
public class NacosConfig{
/**
* 用于改变程序自动获取的本机ip
*/
@Bean
@Primary
public NacosDiscoveryProperties nacosProperties() {
NacosDiscoveryProperties nacosDiscoveryProperties = new NacosDiscoveryProperties();
nacosDiscoveryProperties.setIp("localhost");
return nacosDiscoveryProperties;
}
}
喜欢本文的朋友不要忘记点一个免费的赞哦,你的赞将是我最大的动力。
如果觉得有用,也可以扫码支持博主。感兴趣的朋友,可以在扫码的时候添加博主微信。
欢迎评论区留言讨论。
最后
以上就是魔幻大船为你收集整理的使用SpringCloud Gateway进行路由后,Cookie丢失,无法设置到前端的全部内容,希望文章能够帮你解决使用SpringCloud Gateway进行路由后,Cookie丢失,无法设置到前端所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复