前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在SpringCloud中如何获取用户真实IP(避免各种问题)

在SpringCloud中如何获取用户真实IP(避免各种问题)

作者头像
用户10136162
发布2024-03-16 11:44:56
2330
发布2024-03-16 11:44:56
举报
文章被收录于专栏:Eliauk的小窝Eliauk的小窝

大家平时获取用户的真实IP的时候可能会遇到的一些问题 如果发生问题可以按照以下思路排查应该会帮到你

1、查看Nginx配置

一般情况下,我们的项目都是通过Nginx进行代理的,所以我们需要查看Nginx的配置文件

代码语言:javascript
复制

location / {

proxy_set_header X-Real-IP $remote_addr;



}

2. 使用X-Forwarded-For头字段:类似于X-Real-IP,可以使用X-Forwarded-For头字段来传递客户端的真实IP地址。在NGINX配置文件中,可以通过添加如下代码来设置X-Forwarded-For头字段的值:

location / {

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

查看是否有以上配置进行了代理转发

2、查看GateWay配置(如果单体项目没有使用网关忽略)

首先要查看网关中的过滤器链里边所有的自定义过滤器有没有对请求头进行了修改,如果有修改的话请根据当前业务进行适当的修改

3、查看是否调用了Fegin接口

如果调用了Fegin接口的话,他默认是不携带多余请求头的,所以我们要对齐进行配置

代码语言:javascript
复制
@Configuration
public class FeignAuthRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 获取当前的ServletRequestAttributes
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            // 获取原始的HttpServletRequest
            HttpServletRequest request = attributes.getRequest();

            // 遍历所有的请求头
            Enumeration<String> headerNames = request.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String headerName = headerNames.nextElement();
                String headerValue = request.getHeader(headerName);
                // 这个地方一定要加上,否则会出现一些问题
                if (headerName.equals("content-length")){
                    continue;
                }
                // 将请求头添加到Feign的RequestTemplate
                requestTemplate.header(headerName, headerValue);
            }
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、查看Nginx配置
  • 2、查看GateWay配置(如果单体项目没有使用网关忽略)
  • 3、查看是否调用了Fegin接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档