包含通配符的equals

1场景描述

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

如何解决呢?

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

 我返回的就是PFXa

 

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

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

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

Java代码  

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

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

Java代码  

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

  

 

2,使用正则表达式

isContains2 方法

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

实现如下

Java代码  

  1. public static int isContains2(String[] strArray, String j) {  
  2.         int index = Constant.NEGATIVE_ONE;  
  3.         if (isNullOrEmpty(strArray)) {  
  4.             return index;  
  5.         }  
  6.         int length2 = strArray.length;  
  7.         for (int ii = 0; ii < length2; ii++) {  
  8.             String i = strArray[ii];  
  9.             if (i == j || (equalsWildcard(j, i))) {  
  10.                 index = ii;  
  11.                 break;  
  12.             }  
  13.         }  
  14.         return index;  
  15.     }  

 

equalsWildcard方法如下:

Java代码  

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

 对方法equalsWildcard()的单元测试

Java代码  

  1. @Test  
  2.     public void test_equal(){  
  3.         String source="ab.d.c";  
  4. //      System.out.println(regex);  
  5.         org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, ".b.d.c"));  
  6.         org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "a..d.c"));  
  7.         org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "a.*.d.c"));  
  8.         org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "abad.c"));  
  9.         org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "a*ad.c"));  
  10.         org.junit.Assert.assertFalse(RegexUtil.equalsWildcard(source, "ab.d.."));  
  11.         org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab.d.c"));  
  12.         org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, source));  
  13.         org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "a*.d.c"));  
  14.         org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab.*.c"));  
  15.         org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab*.c"));  
  16.         org.junit.Assert.assertTrue(RegexUtil.equalsWildcard(source, "ab*.d*c"));  
  17.   
  18.     }  
  19.       

 

equalsWildcard说明:

有两个参数:

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

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

时间: 2024-10-29 05:32:09

包含通配符的equals的相关文章

SQL中通配符、转义符与[号的使用(downmoon)

一.搜索通配符字符的说明可以搜索通配符字符.有两种方法可指定平常用作通配符的字符: 使用 ESCAPE 关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符.例如,要搜索在任意位置包含字符串 5% 的字符串,请使用: WHERE ColumnA LIKE '%5/%%' ESCAPE '/' 在上述 LIKE 子句中,前导和结尾百分号 (%) 解释为通配符,而斜杠 (/) 之后的百分号解释为字符 %. 在方括号 ([ ]) 中只包含通配符本身.要搜索破折号 (-) 而不

Java中判断对象是否相等的equals()方法使用教程_java

Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认操作也是合乎情理的.然而,对于多数类类说,这种判断并没有什么意义,例如,采用这种方式比较两个PrintStream是否相等就完全没有意义.然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的.所以一般在自定义类中都要重写equals比较. 下面给出编写一个完美eq

SQL中通配符、转义符与&amp;quot;[&amp;quot;号的使用(downmoon)

一.搜索通配符字符的说明可以搜索通配符字符.有两种方法可指定平常用作通配符的字符: 使用 ESCAPE 关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符.例如,要搜索在任意位置包含字符串 5% 的字符串,请使用: WHERE ColumnA LIKE '%5/%%' ESCAPE '/'在上述 LIKE 子句中,前导和结尾百分号 (%) 解释为通配符,而斜杠 (/) 之后的百分号解释为字符 %.在方括号 ([ ]) 中只包含通配符本身.要搜索破折号 (-) 而不是用

ASP.NET编写ISAPI

asp.net   taito的专栏 QQ:8699765 提供高速稳定 .NET2.0 + SQL2005 空间免费试用   CSDN首页 |  Blog |  我的Blog |  后台管理 论坛 |  文档 |  档案 |  联系 |  RSS订阅  |  搜索 |    81篇原创: 2篇翻译: 25篇转载: 31427次点击: 62个评论: 5个Trackbacks 文章 Ajax(RSS) ASP(RSS) ASP.net(RSS) ASP.Net 2.0(RSS) SQLSERVER

ASP.NET中的HTTP模块和处理程序

asp.net|程序 介绍 在Internet时代的开端,客户端的需求非常有限:.htm文件就可以满足他们的需求.但是,随着时间的流逝,客户端需求的扩充超越了.htm文件或静态文件所包含的功能. 开发者需要扩充或扩展Web服务器的功能.Web服务器厂商设计了不同的解决方案,但是都遵循同一个主题"向Web服务器插入某些组件".所有的Web服务器补充技术都允许开发者建立并插入组件以增强Web服务器的功能.微软公司提出了ISAPI(Internet服务器API),网景公司提出了NSAPI(网

AKKA文档(java版)—角色

原文地址  译者:Zhanggc      审校:吴京润 角色 角色模型对编写并发.分布式系统进行了高度抽象.它减轻了开发者必须对互斥锁与线程管理的负担,更容易编写出正确的并发与并行系统.早在1973 年 Carl Hewitt 发表的论文中定义了角色,但一直流行于Erlang 语言中,随后被爱立信公司应用于建立高并发.可靠通信系统,取得了巨大成功. Akka 框架里面角色的API 跟Scala 框架里面角色相似,后者一些语法曾经模仿Erlang语言. 创建角色 注意:由于Akka强迫父级监管者

Android中Textview超链接实现方式_Android

TextView中的超链接可以通过几种方式实现:一.Html.fromHtml方式 TextView,本身就支持部分的Html格式标签.这其中包括常用的字体大小颜色设置,文本链接等.使用起来也比较方便,只需要使用Html类转换一下即可: textView.setText(Html.fromHtml(str)); 代码如下: public class Test10Activity extends Activity { TextView textView ; @Override protected

Spark编程指南笔记

本文是参考Spark官方编程指南(Spark 版本为1.2)整理出来的学习笔记,主要是用于加深对 Spark 的理解,并记录一些知识点. 1. Spark介绍 Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce 框架,都是基于map reduce算法所实现的分布式计算框架,拥有Hadoop MapReduce所具有的优点:不同于MapReduce的是Job中间输出和结果可以保存在内存中,而不需要读写HDFS,因此Spark能更好地适用于machine l

AKKA文档(java版)—角色(一)

角色 角色模型对编写并发.分布式系统进行了高度抽象.它减轻了开发者必须对互斥锁与线程管理的负担,更容易编写出正确的并发与并行系统.早在1973 年 Carl Hewitt 发表的论文中定义了角色,但一直流行于Erlang 语言中,随后被爱立信公司应用于建立高并发.可靠通信系统,取得了巨大成功. Akka 框架里面角色的API 跟Scala 框架里面角色相似,后者一些语法曾经模仿Erlang语言. 创建角色 注意:由于Akka强迫父级监管者监督每一个角色和(潜在的子级)监管者,建议你熟悉角色系统.