• Java中使用HttpRequest获取用户真实IP地址端口


     1 import javax.servlet.http.HttpServletRequest;  
     2   
     3 /** 
     4  * 自定义访问对象工具类 
     5  *  
     6  * 获取对象的IP地址等信息 
     7  * @author X-rapido 
     8  * 
     9  */  
    10 public class CusAccessObjectUtil {  
    11   
    12     /** 
    13      * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, 
    14 *  
    16      * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? 
    17      * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 
    18      *  
    19      * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 
    20      * 192.168.1.100 
    21      *  
    22      * 用户真实IP为: 192.168.1.110 
    23      *  
    24      * @param request 
    25      * @return 
    26      */  
    27     public static String getIpAddress(HttpServletRequest request) {  
    28         String ip = request.getHeader("x-forwarded-for");  
    29         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    30             ip = request.getHeader("Proxy-Client-IP");  
    31         }  
    32         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    33             ip = request.getHeader("WL-Proxy-Client-IP");  
    34         }  
    35         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    36             ip = request.getHeader("HTTP_CLIENT_IP");  
    37         }  
    38         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    39             ip = request.getHeader("HTTP_X_FORWARDED_FOR");  
    40         }  
    41         if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
    42             ip = request.getRemoteAddr();  
    43         }  
    44         return ip;  
    45     }  
    46       
    47 }  



    /**

     *获取端口

     */

    复制代码
     1 public void doGet(HttpServletRequest request, HttpServletResponse response)
     2     throws ServletException, IOException {
     3    String uri = request.getRequestURI();//返回请求行中的资源名称
     4    String url = request.getRequestURL().toString();//获得客户端发送请求的完整url
     5    String ip = request.getRemoteAddr();//返回发出请求的IP地址
     6    String params = request.getQueryString();//返回请求行中的参数部分
     7    String host=request.getRemoteHost();//返回发出请求的客户机的主机名
     8    int port =request.getRemotePort();//返回发出请求的客户机的端口号。
     9    System.out.println(ip);
    10    System.out.println(url);
    11    System.out.println(uri);
    12    System.out.println(params);
    13    System.out.println(host);
    14    System.out.println(port);
    15 }
    再牛逼的梦想,也抵不住我傻逼似的坚持!别在该奋斗的年纪,贪图安逸。 今天多学一些知识,明天开发的速度就更快一下。后天你就会变得更好。
  • 相关阅读:
    nginx之proxy、cache、upstream模块学习
    lvs负载均衡
    nginx之rewrite匹配需求
    nginx之配置proxy_set_header
    nginx结合fastcgi
    转载:vsftp中的local_umask和anon_umask
    python3.6连接mysql或者mariadb
    在linux环境下安装python3.6
    元字符匹配
    sendEmail
  • 原文地址:https://www.cnblogs.com/LowKeyCXY/p/14835974.html
Copyright © 2020-2023  润新知