zoukankan      html  css  js  c++  java
  • 自定义类库:java根据HttpServletRequest请求获取ip地址

    一、在web站点中可以根据HttpServletRequest对象获取真实的客户机ip

    package com.moy.whymoy.test.utils;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Objects;
    
    /**
     * [Project]:whymoy  <br/>
     * [Email]:moy25@foxmail.com  <br/>
     * [Date]:2018/3/28  <br/>
     * [Description]:  <br/>
     *
     * @author YeXiangYang
     */
    public abstract class IpUtils {
    
        /**
         * 获取ip地址
         *
         * @param request 请求
         * @return 返回ip字符串
         */
        public static String getIpAddress(HttpServletRequest request) {
            if (Objects.isNull(request)) {
                return "unknown";
            }
            String ip = request.getHeader("x-forwarded-for");
    
            if (nonValidIp(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (nonValidIp(ip)) {
                ip = request.getHeader("X-Forwarded-For");
            }
            if (nonValidIp(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (nonValidIp(ip)) {
                ip = request.getHeader("X-Real-IP");
            }
            if (nonValidIp(ip)) {
                ip = request.getRemoteAddr();
            }
    
            return ip;
        }
    
    
        /**
         * 是无效的ip地址
         *
         * @param ip ip字符串
         * @return 无效的ip地址返回<tt>true</tt>
         */
        public static boolean nonValidIp(String ip) {
            return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip);
        }
    
    
        /**
         * 是有效的ip地址
         *
         * @param ip ip字符串
         * @return 有效的ip地址返回<tt>true</tt>
         */
        public static boolean isValidIp(String ip) {
            return !nonValidIp(ip);
        }
    }

    yexiangyang

    moyyexy@gmail.com


     

  • 相关阅读:
    Render Props
    react16新特性
    typescript
    calc
    类数组
    promise fullfill状态时 value是一个promise,那么此promise.then()里面收到的是什么
    M个同样的苹果放N个同样的盘子,允许有盘子空着, 问有多少种放法?
    history
    js创建二维数组
    钉钉-E应用开发初体验(企业内部应用)
  • 原文地址:https://www.cnblogs.com/moy25/p/8662295.html
Copyright © 2011-2022 走看看