SpringBoot如何获取客户端的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头解决代理服务器和匿名代理服务器的问题。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot+redis实现微博热搜排行榜的示例代码
本文主要介绍了springboot+redis实现微博热搜排行榜的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-05-05Java解决No enclosing instance of type PrintListFromTailToHead
这篇文章主要介绍了Java解决No enclosing instance of type PrintListFromTailToHead is accessible问题的两种方案的相关资料,需要的朋友可以参考下2016-07-07springboot2.0配置连接池(hikari、druid)的方法
springboot 2.0 默认连接池就是Hikari了,直接在配置文件中输入配置就可以了,本文通过实例代码给大家介绍了springboot2.0配置连接池(hikari、druid)的方法,感兴趣的朋友一起看看吧2021-12-12Web三大组件之Filter,Listener和Servlet详解
这篇文章主要为大家详细介绍了Web三大组件之Filter,Listener和Servlet,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助2022-03-03Spring Boot 集成并开发 Sa-token示例详解
Sa-token是一款高可用的权限认证框架,他带我们用最简化的配置完成用 spring security 需要进行大量配置的才能完成的工作,这篇文章主要介绍了Spring Boot 集成并开发 Sa-token,需要的朋友可以参考下2023-06-06
最新评论