Java获取用户IP

简介:

/**

 * 获取访问者IP
 * 
 * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
 * 
 * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
 * 如果还不存在则调用Request .getRemoteAddr()。
 * 
 * @param request
 * @return
 */
public static String getIpAddr(HttpServletRequest request) {
    String ip = request.getHeader("X-Real-IP");
    if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
        return ip;
    }
    ip = request.getHeader("X-Forwarded-For");
    if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
        // 多次反向代理后会有多个IP值,第一个为真实IP。
        int index = ip.indexOf(',');
        if (index != -1) {
            return ip.substring(0, index);
        } else {
            return ip;
        }
    } else {
        return request.getRemoteAddr();
    }
}
相关文章
|
5月前
|
Java
Java 如何根据域名查询对应的ip地址
Java 如何根据域名查询对应的ip地址
267 3
|
1天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
2月前
|
网络协议 Java 数据安全/隐私保护
如何使用Java实现基于TCP/IP协议的即时通讯系统
TCP/IP协议是现代计算机网络通信中最常用的协议之一,而即时通讯系统则是当前互联网应用中非常普遍的一种场景。本文将介绍如何使用Java编程语言来实现基于TCP/IP协议的即时通讯系统,包括建立服务端和客户端、发送和接收消息等方面的详细步骤和示例。
|
4月前
|
网络协议 Java 程序员
java网络编程什么是TCP/IP协议栈?
java网络编程什么是TCP/IP协议栈?
32 2
|
4月前
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
55 1
|
5月前
|
Java
java 如何将ip 1.2.3.4 变成1.2.3.0/24
如果你想手动实现而不使用第三方库,你可以按照如下的方式进行。以下是一个手动实现的简单示例: ```java import java.net.InetAddress; import java.net.UnknownHostException; public class IpToCidrConverter { public static void main(String[] args) { String ipAddress = "1.2.3.4"; int subnetPrefixLength = 24; try {
|
7月前
|
Java
编程作业(2) - 编程题 3. ip地址判定(Java)
编程作业(2) - 编程题 3. ip地址判定(Java)
|
8月前
|
Java
Java如何获取请求的ip 地址?
Java如何获取请求的ip 地址
128 0
|
9月前
|
Java Linux Nacos
【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发
【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发
196 0
|
9月前
|
Java
java 遍历打印ip 0.0.0.0 -255.255.255.255,不包含保留地址
java 遍历打印ip 0.0.0.0 -255.255.255.255,不包含保留地址