Spring Boot获取客户端的IP地址

这篇具有很好参考价值的文章主要介绍了Spring Boot获取客户端的IP地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在Web应用程序中,获取客户端的IP地址是一项非常常见的需求,例如记录访问日志、过滤恶意IP等。在本文中,我们将介绍如何使用Spring Boot框架获取客户端的IP地址。

方法一:使用ServletRequest对象获取IP地址

Spring Boot应用程序可以使用HttpServletRequest对象获取客户端的IP地址。在Spring Boot中,可以通过注入HttpServletRequest作为一个参数来获取该对象。

@GetMapping("/getIp")
public String getIp(HttpServletRequest request) {
    String ipAddress = request.getRemoteAddr();
    return "Client IP address: " + ipAddress;
}

上述代码中,我们通过调用 request.getRemoteAddr() 方法获取客户端的IP地址。

方法二:使用ServletRequestAttributes对象获取IP地址

除了使用HttpServletRequest对象外,Spring Boot还提供了另一种获取客户端IP地址的方法。这种方法是使用ServletRequestAttributes对象,在方法中注入该对象即可。代码如下:

@GetMapping("/getIp2")
public String getIp2(ServletRequest request) {
    String ipAddress = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getRemoteAddr();
    return "Client IP address: " + ipAddress;
}

在上面的代码中,我们通过 RequestContextHolder.currentRequestAttributes() 方法获取当前的HttpServletRequest对象,再通过 getRequest().getRemoteAddr() 方法获取客户端的IP地址。

注意事项

虽然以上两种方法可以获取客户端的IP地址,但需要注意以下几个问题:

  • 如果应用程序部署在反向代理服务器后面,使用上述方法获取的IP地址可能是反向代理服务器的IP地址,而不是客户端真正的IP地址。
  • 有些客户端可能使用了匿名代理服务器,例如TOR等,此时获取到的IP地址不是客户端真正的IP地址。

解决方案:使用X-Forwarded-For头

为了解决上述问题,我们可以使用X-Forwarded-For头。该头字段是一个逗号分隔的IP地址列表,最左边的IP地址是客户端的真实IP地址。以下是使用X-Forwarded-For头获取客户端IP地址的示例代码。

@GetMapping("/getIp3")
public String getIp3(HttpServletRequest request) {
    String ipAddress = request.getHeader("X-Forwarded-For");
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getHeader("Proxy-Client-IP");
    }
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
        ipAddress = request.getRemoteAddr();
    }
    return "Client IP address: " + ipAddress.split(",")[0];
}

上述代码中,我们首先使用 request.getHeader("X-Forwarded-For") 方法获取X-Forwarded-For头字段的值,如果获取失败,则尝试使用其他头字段。最后,我们通过逗号对IP地址进行分割,获取最左边的IP地址,即客户端的真实IP地址。

总结

本文介绍了使用Spring Boot框架获取客户端IP地址的三种方法:
1.使用HttpServletRequest对象
2.使用ServletRequestAttributes对象
3.使用X-Forwarded-For头
当我们需要获取客户端的真实IP地址时,应该使用X-Forwarded-For头解决代理服务器和匿名代理服务器的问题。文章来源地址https://www.toymoban.com/news/detail-473591.html

到了这里,关于Spring Boot获取客户端的IP地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaScript】如何获取客户端IP地址?

    使用这个库:request-ip 它按照如下顺序获取请求的IP地址: X-Client-IP X-Forwarded-For (Header may return multiple IP addresses in the format: “client IP, proxy 1 IP, proxy 2 IP”, so we take the first one.) CF-Connecting-IP (Cloudflare) Fastly-Client-Ip (Fastly CDN and Firebase hosting header when forwared to a cloud function) True-Clie

    2024年02月05日
    浏览(47)
  • 获取客户端真实 IP 地址的最佳实践

    1. 业务上云带来性能收益 公司从去年全面推动业务上云,而以往 IDC 架构部署上,接入层采用典型的 4 层 LVS 多机房容灾架构,在业务高峰时期,扩容困难(受限于物理机资源和 LVS 内网网段的网络规划),且抵挡不住 HTTPS 卸载引发的高 CPU 占用。 而经过压力测试发现,使用

    2024年02月05日
    浏览(57)
  • Java WebSocket 获取客户端 IP 地址

    在开发 Web 应用程序时,我们通常需要获取客户端的 IP 地址用于日志记录、身份验证、限制访问等操作。当使用 WebSocket 协议时,我们可以使用 Java WebSocket API 来获取客户端的 IP 地址。 本文将介绍如何使用 Java WebSocket API 获取客户端 IP 地址,以及如何在常见的 WebSocket 框架中

    2024年02月05日
    浏览(45)
  • Nginx代理后获取客户端真实IP地址

    在项目实际应用中,我们可能会需要获取到用户也就是客户端的真实IP地址,比如记录系统操作日志等情况。 通常情况下我们可以使用以下方式来获取IP地址 但是当我们使用Nginx反向代理项目地址后,使用以上方法只能获取到Nginx服务器的IP地址,并不是客户端的IP地址。 解决

    2023年04月11日
    浏览(46)
  • 【Java开发】之获取客户端真实 IP 地址

    在投票系统开发中,为了防止刷票,我们需要限制每个 IP 地址只能投票一次; 当网站受到诸如 DDoS(Distributed Denial of Service,分布式拒绝服务攻击)等攻击时,我们需要快速定位攻击者 IP; 在渗透测试过程中,经常会碰到网站有 CDN(Content Distribution Network,内容交付网络),

    2024年02月04日
    浏览(48)
  • Qt 获取本机 ip地址方法 获取客户端ip和端口的方法

    上述函数返回本机所有IPv4的ip地址列表,比如192.168.1.10|192.166.1.95 其它方法=》 获取客户端IP地址:

    2024年02月14日
    浏览(41)
  • ASP.NET 获取客户端IP、MAC地址

      qqwry.dat 纯真IP数据库下载地址:   

    2024年02月15日
    浏览(48)
  • Docker部署Nginx,无法获取客户端真实ip地址

    在部署docker版本nginx进行请求转发,意外发现nginx打印日志中的客户端ip并非为客户端的真实ip(221.237.xxx.xxx),而是docker虚拟网卡的ip(172.17.0.1) 开始猜测是nginx配置问题,对比其他环境,发现配置相同,但其他环境未出现此情况 通过查询资料,推测是docker网桥和linux防火墙存在

    2023年04月21日
    浏览(36)
  • .net core WebAPI 获取客户端IP的地址

    1、写个扩展方法在控制器里面: 注:不能创建外部类,否则会报错,HttpContext必须是和带有继承ControllerBase的类一起才行 1.在Startup.cs文件里注入服务: 2、去控制器里面写入:

    2024年02月03日
    浏览(49)
  • Java编程技巧:获取ip地址、通过ip获取地理位置、获取客户端操作系统、获取客户端浏览器、获取主机名、获取操作系统、获取系统架构

    说明: 大家直接去对应项目位置找到代码,然后看着复制就行了 1.1、若依(自己写的代码) 项目:https://gitee.com/y_project/RuoYi 子模块:ruoyi-common 所在类:com.ruoyi.common.utils.IpUtils 所在方法:getIpAddr 详细位置:整个方法 1.2、Snowy(借助hutool工具包) 项目:https://gitee.com/xiaonuo

    2024年02月04日
    浏览(116)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包