首页 > 编程语言 >java 获取真实ip

java 获取真实ip

时间:2022-12-06 06:55:06浏览次数:35  
标签:java 获取 ip request equalsIgnoreCase length unknown null

通过 HttpServletRequest 获取真实请求IP

package cc.library.security.utils;

import javax.servlet.http.HttpServletRequest;

/**
 * CREATE BY funnyZpC ON 2018/5/3
 **/
public class IPUtils {
    /**
     * 获取用户真实IP地址,不使用request.getRemoteAddr()的原因是有可能用户使用了代理软件方式避免真实IP地址,
     * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值
     *
     * @return ip
     */
    public static String getRealIP(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
            // 多次反向代理后会有多个ip值,第一个ip才是真实ip
            if( ip.indexOf(",")!=-1 ){
                ip = ip.split(",")[0];
            }
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
}

标签:java,获取,ip,request,equalsIgnoreCase,length,unknown,null
From: https://www.cnblogs.com/acdongla/p/16954145.html

相关文章

  • ReactRouter-参数传递与获取参数
    参数传递与获取参数1.动态路由传参*前提配置路由,留好占位//1.配置占位<HashRouter><Switch><Routepath="/xxx/:id"></Route>//留好占位</Switch><......
  • 【Linux】Jenkins之Pipeline的使用(五)
    概念是一套运行在Jenkins上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。优势代码:Pipeline......
  • Java网络编程---基于TCP协议实现客户端服务端通信
    首先,对于TCP协议,我们要明确:TCP:传输控制协议TCP会尽自己所能,尽量将数据发送给对方;但并不能保证100%可以发送给对方TCP会在数据发送不到对方的情况下,会给应用......
  • NOIP2022 游记
    说实话,\(\text{CSP-S}\)和\(\text{NOIP}\)都不怎么想写游记,答案是没感觉啥就考过来了,很疑惑进场打配置,发现键盘极其难受,摁几下摁不出来,工作人员表示只换机子不换键盘,......
  • JavaSE复习day1
    JavaSE复习day1胡家伟1.代码格式注释单行注释:通常用于解释方法内某单行代码的作用。多行注释:通常用于解释一段代码的作用。文档注释:通常用于生成Java开发文档。......
  • 用Java实现分布式缓存(1)——缓存淘汰
    本文代码https://github.com/weloe/Java-Distributed-Cache/tree/main/src/main/java/com/weloe/cache/outstrategyhttps://github.com/weloe/Java-Distributed-Cache/tr......
  • 让 iPhone 兼职网络摄像头 bug All In One
    让iPhone兼职网络摄像头bugAllInOne让iPhone兼职网络摄像头❌不好使,不稳定,连接不上连续互通相机让iPhone兼职网络摄像头iPhone强大的摄像头系统配合......
  • IP地址详解
     局域网局域网:一般称为内网简单局域网的构成:交换机、网线、pc(其它IT终端)交换机:用来组建内网的局域网设备IP地址ip地址就是一个唯一标识,是一段网络编码(二进制......
  • JAVA 实现多线程发售火车票
    publicclassdemo05{publicstaticvoidmain(String[]args){TicketWindowtw=newTicketWindow();newThread(tw,"窗口1").start();ne......
  • JAVA array list输出数据
    importjava.util.ArrayList;publicclass数组集合输出数据{publicstaticvoidmain(String[]args){ArrayLista1=newArrayList();a1.add("张......