美文网首页
使用SpringCloud Gateway进行路由后,Cooki

使用SpringCloud Gateway进行路由后,Cooki

作者: 王月亮17 | 来源:发表于2022-08-27 09:54 被阅读0次

两个服务,分别为接口提供服务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,如图:


image.png

但是如果通过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进行路由后,Cooki

      本文链接:https://www.haomeiwen.com/subject/tdlvbrtx.html