以后再用到的话,至少能起个参考作用
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. 3.Centos-Docker-rancher

    1.安装mysql,设置密码 docker run -d --name mysqldb -e MYSQL_ROOT_PASSWORD=密码 mysql:latest --character-set-s ...

  2. 在Laravel中使用Middleware进行身份验证

    新建一个中间件: 方法写在handle中 判断用户是否登录而且是否是管理员,不是的话返回到主页 新建判断是否为管理员的方法 在kernel定义一个中间件,key是admin 注册群组路由:prefix ...

  3. C# Quartz 整理

    因项目需要,在C#中使用了定时程序.自然就使用了Quartz了 但是使用的时候,经过一段时间后,发现了两个重大问题,结果导致的是一样的,就是都导致了定时不会继续执行了. 第一个问题是,定时程序发布在I ...

  4. DotNetCore 笔记

    最近公司框架升级到DotNetCore了,但是在用post请求的时候,发现页面的post data后台并没有接收到数据,经过调查发现,netcore用法和之前的MVC5不一样,想要接收post里的da ...

  5. 计蒜客 18492.Upside down primes-米勒拉宾判大素数 (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 K)

    K. Upside down primes 传送门 这个题就是把大数按字符串输进去,判断一下是不是素数,然后反转180度,先判断反转之后的东西是不是一个数,如果是的话,再把这个数判一下是不是素数,如果 ...

  6. (4)C#工具箱-菜单和工具栏

    1.ContextMenuStrip(右键菜单栏) 把contextMenuStrip控件拖到窗体上,会在窗体下面显示,点击控件在最上行显示菜单栏,可以任意设置.(运行以后不会在界面上显示,它需要预控 ...

  7. Codeforces Round #428 A. Arya and Bran【模拟】

    A. Arya and Bran time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  8. Codeforces 1029 E. Tree with Small Distances(树上dp)

    题目直通车:http://codeforces.com/problemset/problem/1029/E 思路大意:在树上做dp,依次更新ar数组,ar[i]表示以i为根节点的子树对答案的最小贡献值 ...

  9. disable enable 所有其他表关联的外键

    Disable: begin for i in (select constraint_name, table_name from user_constraints where constraint_n ...

  10. CodeForces - 985F Isomorphic Strings

    假如两个区间的26的字母出现的位置集合分别是 A1,B1,A2,B2,....., 我们再能找到一个排列p[] 使得 A[i] = B[p[i]] ,那么就可以成功映射了. 显然集合可以直接hash, ...