IP黑名单模糊匹配问题
需求如下
//ip黑名单列表
List<String> ips = new ArrayList<>();
ips.add("10.123.130.5")
ips.add("10.123.129.*")
例如10.123.130.5 访问我的服务,那么它在黑名单列表中,就拦截它.
例如10.123.129.10 访问我的服务,我也要拦截它.
第二个"*"号我们可以用正则搞定它.
思路是把黑名单中的每条数据变成一个正则规则表达式,然后逐一去匹配.
/**
* 是否存在黑名单中
* @param clientIp 目标ip
* @param ipblacklist 目标黑名单
* @return
*/
private boolean isExistBlackList(String clientIp,List<String> ipblacklist){
boolean flag = Boolean.FALSE;
for (String ip : ipblacklist){
String replace = ip.replace(".", "\\.").replace("*", "\\d{1,3}");
Pattern pattern = Pattern.compile(replace);
Matcher matcher = pattern.matcher(clientIp);
if(matcher.matches()){
flag = Boolean.TRUE;
break;
}
}
return flag;
}
如有更好的方法欢迎评论
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。