如何在SpringCloud Gateway中获取请求的真实IP地址,而不是服务名

在使用SpringCloud Gateway的时候,路由一般配置为服务名。例如 lb://DEVICE-API/device/add 路径,但是咱却不知道具体是哪个IP。

如果仔细分析源码,可以发现有个org.springframework.cloud.gateway.filter.LoadBalancerClientFilter类,这个filter中对lb请求进行了处理,转换成了真正的url。

可以看下它的核心方法

其实, SpringCloud Gateway 有打印日志,只是默认是trace级别,而平常打印的是info级别,所以会被忽略掉。

以下是解决办法:

1.在配置文件中设置org.springframework.cloud.gateway.filter.LoadBalancerClientFilter的日志级别
logging.level.org.springframework.cloud.gateway.filter.LoadBalancerClientFilter=TRACE 注意 这里的配置一定要在
logging.level.org.springframework之后配置 不然会覆盖

2.重写LoadBalancerClientFilter 建立org.springframework.cloud.gateway.filter包 将 类重写 spingboot默认会从本项目中加载类,原先的类就被弃用了。

3.继承LoadBalancerClientFilter 重写filter方法,将日志级别改为info即可

最后打印:

+2

发表评论

邮箱地址不会被公开。