`
cobble19
  • 浏览: 105187 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Java验证IP和MAC地址

    博客分类:
  • Java
阅读更多
ip匹配
     /**
     * 验证requestIp是否匹配bindIp,匹配返回true,否则返回false
     * @param bindIp 绑定的IP
     * @param requestIp 待验证的IP,即登录IP
     * @return
     * @throws Exception
     */
    public boolean validBindIp(String bindIp, String requestIp) throws Exception {
        //无绑定IP,则所有IP都是正确的。
        if (StringUtils.isEmpty(bindIp)) {
            return true;
        }

        if (StringUtils.isEmpty(requestIp)) {
            return false;
        }
        //是否绑定的标志,true为2个IP匹配,false为不匹配。
        boolean validBindIp = true;
        //split 函数需要的参数是正则表达式,【.】在正则表达式有特殊含义,所以要转义。
        String[] bindIpSplits = bindIp.split("\\.");
        String[] requestIpSplits = requestIp.split("\\.");
        int bindIpSplitsLength = bindIpSplits.length;
        int requestIpSplitsLength = requestIpSplits.length;
        int minLength = bindIpSplitsLength < requestIpSplitsLength ? bindIpSplitsLength : requestIpSplitsLength;

        for (int i = 0; i < minLength; i++) {
            //标志为false,则跳出循环。
            if (!validBindIp) {
                break;
            }
            //"*"匹配所有
            if (bindIpSplits[i].indexOf("*") != -1) {
                continue;
            }
            //对应的值是否相等。如果不等,则绑定标志置为false。
            if (!requestIpSplits[i].equals(bindIpSplits[i])) {
                validBindIp = false;
            }
        }

        return validBindIp;
    }

    public boolean validBindIp(String[] bindIps, String requestIp) throws Exception {
        if (bindIps == null || bindIps.length == 0) {
            return true;
        }
        if (StringUtils.isEmpty(requestIp)) {
            return false;
        }
        boolean validBindIp = false;
        for (String bindIp : bindIps) {
            //如果有一个符合,则比较完成,退出循环,返回true。
            if (validBindIp) {
                break;
            }
            validBindIp = this.validBindIp(bindIp, requestIp);
        }
        return validBindIp;
    }

    public boolean validBindIp(String bindIpsWithSeparator, String requestIp, String separator) throws Exception {
        if (StringUtils.isEmpty(bindIpsWithSeparator)) {
            return true;
        }
        if (StringUtils.isEmpty(requestIp)) {
            return false;
        }
        if (StringUtils.isEmpty(separator)) {
            separator = ",";
        }
        String[] bindIps = bindIpsWithSeparator.split(separator);
        return this.validBindIp(bindIps, requestIp);
    }


mac地址匹配
     /**
     * 验证requestMac是否匹配bindMac,若匹配返回true,否则返回false
     * @param bindMac 绑定的物理地址
     * @param requestMac 待验证的物理地址
     * @return
     * @throws Exception
     */
    public boolean validBindMac(String bindMac, String requestMac) throws Exception {
        //无绑定MAC,则所有MAC都是正确的。
        if (StringUtils.isEmpty(bindMac)) {
            return true;
        }

        if (StringUtils.isEmpty(requestMac)) {
            return false;
        }
        //是否绑定的标志,true为2个MAC匹配,false为不匹配。
        boolean validBindMac = true;
        
        String[] bindMacSplits = bindMac.split("-");
        String[] requestMacSplits = requestMac.split("-");
        int bindMacSplitsLength = bindMacSplits.length;
        int requestMacSplitsLength = requestMacSplits.length;
        int minLength = bindMacSplitsLength < requestMacSplitsLength ? bindMacSplitsLength : requestMacSplitsLength;

        for (int i = 0; i < minLength; i++) {
            //标志为false,则跳出循环。
            if (!validBindMac) {
                break;
            }
            //"*"匹配所有
            if (bindMacSplits[i].indexOf("*") != -1) {
                continue;
            }
            //对应的值是否相等。如果不等,则绑定标志置为false。
            if (!requestMacSplits[i].equalsIgnoreCase(bindMacSplits[i])) {
                validBindMac = false;
            }
        }

        return validBindMac;
    }

    public boolean validBindMac(String[] bindMacs, String requestMac) throws Exception {
        if (bindMacs == null || bindMacs.length == 0) {
            return true;
        }
        if (StringUtils.isEmpty(requestMac)) {
            return false;
        }
        boolean validBindMac = false;
        for (String bindMac : bindMacs) {
            //如果有一个符合,则比较完成,退出循环,返回true。
            if (validBindMac) {
                break;
            }
            validBindMac = this.validBindMac(bindMac, requestMac);
        }
        return validBindMac;
    }

    public boolean validBindMac(String bindMacsWithSeparator, String requestMac, String separator) throws Exception {
        if (StringUtils.isEmpty(bindMacsWithSeparator)) {
            return true;
        }
        if (StringUtils.isEmpty(requestMac)) {
            return false;
        }
        if (StringUtils.isEmpty(separator)) {
            separator = ",";
        }
        String[] bindMacs = bindMacsWithSeparator.split(separator);
        return this.validBindMac(bindMacs, requestMac);
    }


说明:StringUtils来自import org.apache.commons.lang.StringUtils;
分享到:
评论
1 楼 safda1 2017-10-18  
没明白为什么要把mac进行分段比较呢?

相关推荐

Global site tag (gtag.js) - Google Analytics