以后再用到的话,至少能起个参考作用
java实现,struts2的Action中,依赖HttpServletRequest
 
 

package net.dookoo.web.action;
 
import java.util.Enumeration;
 
import javax.servlet.http.HttpServletRequest;
 
import com.linktong.webframework.action.BaseAction;
 
/**
 * 检测系列操作
 *
 * @author sven
 * @version 1.0(新版本号)
 * @see 参考的JavaDoc
 */
public class CheckAction extends BaseAction {
 
      @Override
      public int getObjCount() {
            // TODO Auto-generated method stub
            return 0;
      }
 
      public String getIpAddrByRequest(HttpServletRequest request) {
            // String ip = request.getHeader("x-forwarded-for");
 
            String ip = null;
            String localIP = "127.0.0.1";
                  
            // 反向代理标识不区分大小写,防止配置问题
            Enumeration enumeration = null;
            
//          enumeration = request.getHeaderNames();
//          System.out.println("header----------------");
//          while (enumeration.hasMoreElements()) {
//                String headerName = (String) enumeration.nextElement();
//                System.out.println(headerName+"-"+request.getHeader(headerName));
//          }
//          System.out.println("header----------------");
            
            enumeration = request.getHeaderNames();
            while (enumeration.hasMoreElements()) {
                  String headerName = (String) enumeration.nextElement();
                  
                  if ("cdn-src-ip".equalsIgnoreCase(headerName)) {
                        ip = request.getHeader(headerName);
//                      System.out.println("headerName:"+headerName);
                        break;
                  }
            }
//          System.out.println("cdn-src-ip:" + ip);
            
            enumeration = request.getHeaderNames();
            if (ip == null || ip.length() == 0 || (ip.equalsIgnoreCase(localIP)) || "unknown".equalsIgnoreCase(ip)) {
                  while (enumeration.hasMoreElements()) {
                        String headerName = (String) enumeration.nextElement();
                        
                        if ("x-forwarded-for".equalsIgnoreCase(headerName)) {
                              ip = request.getHeader(headerName);
//                            System.out.println("headerName:"+headerName);
                              break;
                        }
                  }
            }
//          System.out.println("x-forwarded-for:" + ip);
            
            if (ip == null || ip.length() == 0 || (ip.equalsIgnoreCase(localIP)) || "unknown".equalsIgnoreCase(ip)) {
                  ip = request.getHeader("Proxy-Client-IP");
            }
//          System.out.println("Proxy-Client-IP:" + request.getHeader("Proxy-Client-IP"));
 
            
            if (ip == null || ip.length() == 0 || (ip.equalsIgnoreCase(localIP)) || "unknown".equalsIgnoreCase(ip)) {
                  ip = request.getHeader("WL-Proxy-Client-IP");
            }
//          System.out.println("WL-Proxy-Client-IP:" + request.getHeader("WL-Proxy-Client-IP"));
 
            
            if (ip == null || ip.length() == 0 || (ip.equalsIgnoreCase(localIP)) || "unknown".equalsIgnoreCase(ip)) {
                  ip = request.getRemoteAddr();
            }
//          System.out.println("RemoteAddr:" + request.getRemoteAddr());
 
            return ip;
      }
 
      public String checkAnonymityIP() {
            try {
                  String ipAddr = getIpAddrByRequest(getRequest());
                  this.debugTrace("check", "检测到请求的ip地址为" + ipAddr);
                  // System.out.println(ipAddr);
 
                  getRequest().setAttribute("ipAddr", ipAddr);
            } catch (Throwable e) {
                  this.errorTrace("check", e.getMessage(), e);
                  getRequest().setAttribute(this.ERRORMESSAGEthis.SYSTEMERROR);
                  return this.ERROR;
            }
            return this.SUCCESS;
      }
 
}

java检测http请求的ip地址 Java问题通用解决代码的更多相关文章

  1. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  2. java后端通过request对象获取请求的ip地址工具类

    package cn.zgjkw.battalion.util; import org.apache.log4j.Logger; import javax.servlet.http.HttpServl ...

  3. java如何获取访问真实IP地址?

    java如何获取访问真实IP地址 解决方法: 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址,如果没有代理,则获取真实ip public static String getIp( ...

  4. JAVA 长整型转换为IP地址的方法

    JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...

  5. JAVA从本机获取IP地址

    JAVA从本机获取IP地址 论述: 此篇博客是在工作的时候,需要获得当前网络下面正确的ip地址,在网上查阅很多博客,网上一个比较普遍的说法是通过InetAddress.getLocalHost().g ...

  6. Java 获取客服端ip地址

    Java 获取客服端ip地址 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p& ...

  7. 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;

    package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...

  8. 通过Request对象获取请求的IP地址

    /** * 标识要从哪些消息头中获取IP地址 */ private static final String[] getIpArray = {"HTTP_X_FORWARDED_FOR&quo ...

  9. 淘宝IP地址库采集器c#代码

    这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下. 最近做一个项目,功能类似于CNZZ站长统计功能,要求显示Ip所在的省份市区/提供商等信息.网上的Ip纯真数据库,下载下来一看 ...

随机推荐

  1. [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discu ...

  2. BZOJ1588 [HNOI2002]营业额统计 splay模板

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16189  Solved: 6482 [Submit][S ...

  3. VS2015自动添加注释

    记录下创建一个MVC5下的Models文件夹下的代码添加自动注释修改文件路径位置: 让VS自动生成类的头部注释,只需修改两个文集即可,一下两个路径下个有一个 Class.cs文件 C:\Program ...

  4. vue插槽slot的理解与使用

    一.个人理解及插槽的使用场景 刚开始看教程我的疑惑是为什么要用插槽,它的使用场景是什么,很多解释都是“父组件向子组件传递dom时会用到插槽”,这并不能很好的解决我的疑惑.既然你用了子组件,你为什么要给 ...

  5. Java线程同步:synchronized锁住的是代码还是对象

    所以我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步.这叫减小锁的粒度,使代码更大程度的并发.原因是基于以上的思想,锁的代码段太长 ...

  6. 【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧

    (上不了p站我要死了,侵权度娘背锅) Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取 ...

  7. SQL表操作习题2 1~10题

  8. iOS Undefined symbols for architecture arm64解决办法

    Undefined symbols for architecture arm64:  "_OBJC_CLASS_$_YYCache", referenced from:      ...

  9. Eclipse使用Debug模式调试Spring Boot项目时跳转到exitCurrentThread的问题

    Spring Boot项目使用了spring-boot-devtools工具且在Eclipse中Debug调试会自动跳转到这个方法: public static void exitCurrentThr ...

  10. Python学习笔记——对象

    Python 的对象定义方式如下: class Person:        def __init__(self, name):            self.name = name         ...