我是靠谱客的博主 魔幻大船,最近开发中收集的这篇文章主要介绍使用SpringCloud Gateway进行路由后,Cookie丢失,无法设置到前端,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

两个服务,分别为接口提供服务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丢失,无法设置到前端所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部