思路如下:
1.用filter拦截器拦截实现。在web.xml中配置filter拦截器;将允许的ip地址或ip段配置在init-param里,拦截器初始化时将ip信息格式化后加载到二维数组中;
2.当用户请求过来的时候,从request获取ip;对ip格式化;与web.xml配置的ip段比较大小,在之间的通过,不在的通过
3.贡献两断代码,凭记忆了,诶,不要觉得挫啊,速度刚刚的!
/**
* 格式化ip。如:192.168.31.42格式化后为192168031041
* @param orgIp
* @return
*/
private static String ipFormat(String ip)
{
char[] result = new char[]{'0','0','0','0','0','0','0','0','0','0','0','0'};
char[] orgIp = ip.toCharArray();
int m=0;
int n=0;
for(int i = orgIp.length-1 ; i >= 0 ; i--)
{
if('.'==orgIp[i])
{
m++;
continue;
}
result[11-3*m-n] = orgIp[i];
n++;
}
return new String(result);
}
/**校验ip是否合法
* @param ip 输入参数
* @return 合法true,否则false
*/
private static boolean simpleIpCheck(String ip)
{
if(null == ip || 0 == ip.trim().length())
{
return false;
}
String[] ips = ip.split("//.");
if(4 != ips.length)
{
return false;
}
try
{
for(int i=0 ; i < ips.length ; i++)
{
int ipSeq = Integer.parseInt(ips[i]);
if(0 > ipSeq || 255 < ipSeq)
{
return false;
}
}
}
catch(NumberFormatException e)
{
return false;
}
return true;
}