`

包含通配符的equals

    博客分类:
  • Java
阅读更多

1场景描述

网站要实现自动化测试,但是界面上有图形验证码,所以没法自动化.

如何解决呢?

我专门为测试同事写了一个接口,用于返回图形验证码明文,比如

 我返回的就是PFXa

 

但是这个接口不能暴露在线上,否则,你懂的....

所以我增加了一个白名单,白名单中是允许访问的ip.目前白名单只有内网ip,所以就算接口暴露在线上,别人也没法访问.

但是白名单中会有通配符,比如192.168.1.*  ,因为电脑关机之后ip可能会变化

private static String[] whiteList = new String[]{"127.0.0.1", "11.1.213.200", "11.1.251.166",  "11.11.62.*"};

在具体业务之前,会先校验ip是否在白名单中

if (StringUtil.isContains2(whiteList, ip) == -1) {
            map.put(KEY_RESULT, false);
            map.put(KEY_PARAM, "ip not in white list:" + ip);
            return JSONExtension.getJsonP(map, callback);
        }

  

 

2,使用正则表达式

isContains2 方法

功能:判断当前访问的ip是否在白名单中,不在,则直接报错

实现如下

public static int isContains2(String[] strArray, String j) {
        int index = Constant.NEGATIVE_ONE;
        if (isNullOrEmpty(strArray)) {
            return index;
        }
        int length2 = strArray.length;
        for (int ii = 0; ii < length2; ii++) {
            String i = strArray[ii];
            if (i == j || (equalsWildcard(j, i))) {
                index = ii;
                break;
            }
        }
        return index;
    }

 

equalsWildcard方法如下:

/***
	 * 
	 * @param source
	 * @param regex : 含有通配符,通配符只有一个:*.<br>
	 * *表示任何字符,不限个数
	 * @return
	 */
	public static boolean equalsWildcard(String source,String regex){
		regex=regex.replace(".", "\\.");
		regex=regex.replace("*", "(.*)");//加上小括号,方便查看
//		System.out.println(regex);
		Pattern p = Pattern.compile("^"+regex+"$", Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher(source);
		return m.find();
	}

 对方法equalsWildcard()的单元测试

@Test
	public void test_equal(){
		String source="ab.d.c";
//		System.out.println(regex);
		org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, ".b.d.c"));
		org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "a..d.c"));
		org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "a.*.d.c"));
		org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "abad.c"));
		org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "a*ad.c"));
		org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "ab.d.."));
		org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab.d.c"));
		org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, source));
		org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "a*.d.c"));
		org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab.*.c"));
		org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab*.c"));
		org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab*.d*c"));

	}
	

 

equalsWildcard说明:

有两个参数:

第一个参数:要比较的字符串,没有通配符,不是正则表达式.比如访问的ip;

第二个参数:包含通配符,目前只有一个通配符:* ,匹配若干个字符

  • 大小: 11 KB
分享到:
评论

相关推荐

    去年秋招整理了这份后端开发的核心面试题(偏Java),顺利拿到了腾讯offer,决定把它贡献出来

    2019年为了秋招,精挑细学了这一份面试题,并且只挑重点和难点,此次整理包括 Java、数据结构与算法、计算机网络、操作系统、数据库等。如果你能把这些面试题都掌握了,那么,我相信你肯定能拿到一个不错的 offer,...

    Java 高级特性.doc

    1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 3、泛型的类型参数可以有多个。 4、泛型的参数...

    疯狂JAVA讲义

    6.2.2 ==和equals比较运算符 172 6.3 类成员 175 6.3.1 理解类成员 175 6.3.2 单例(Singleton)类 176 6.4 final修饰符 177 6.4.1 final变量 177 6.4.2 final方法 181 6.4.3 final类 182 6.4.4 不可变类 ...

    HGE_系列教材(1-9)

    1. 包含hge.h 文件,并且定义一个HGE 的指针,通过这个指针,我们可以访问HGE Core Functions 层的函数。 #include HGE *pHge = 0; 使用完HGE 指针之后,需要释放这个指针,pHGE-&gt;Release(); 2. 帧函数(Frame ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例104 简化equals()方法的重写 127 实例105 重新计算对象的哈希码 129 实例106 简化hashCode()方法的重写 130 实例107 使用字符串输出对象 132 实例108 简化toString()方法的重写 133 5.6 克隆与序列化 134 实例...

Global site tag (gtag.js) - Google Analytics