源IP可能爲 172.* 172.1.* 172.1.2.* 或者 172.*.2.* 之類的
目標IP 爲 172.1.1.1
思路就是 根據 點 來判斷 是哪一種帶*的源IP 然後進行判斷
對應172.*.1.2 這種的需要特殊處理 方法如下 將IP以點切割後 根據不是*的座標 將源IP和目標IP拼接新的IP進行比較
public static Boolean checkIp(String targetIP,String sourceIP){ String[] targetIPArry = targetIP.split("\\."); String[] sourceIPArry = sourceIP.split("\\."); String newSourceIP = ""; List<Integer> indexArry = new ArrayList(); for(int i = 0;i<sourceIPArry.length;i++){ if(!"*".equals(sourceIPArry[i])){ newSourceIP += sourceIPArry[i]; indexArry.add(i); } } String newTargetIP = ""; for(int j = 0;j<indexArry.size();j++){ newTargetIP += targetIPArry[indexArry.get(j)]; } if(newSourceIP.equals(newTargetIP)){ return true; } return false; }
整體如下
String[] str = whiteIpList.split(";"); List<String> list = Arrays.asList(str); //新增邏輯 支持* 如:172.* 172.1.* *.1.2.3/172.*.2.3/172.1.*.3/172.1.2.* boolean flag = false; for(int i = 0;i<list.size();i++){ String sourceIP = list.get(i).toString(); if(sourceIP.split("\\.").length < 4&&requestIp.startsWith(sourceIP.substring(0,sourceIP.indexOf(".")))){ //說明172.* 172.1.* flag = true; break; }else{ if(sourceIP.indexOf("*")>-1){ if(checkIp(requestIp,sourceIP)){ flag = true; break; } }else if(sourceIP.equals(requestIp)){ flag = true; break; } } }