最近刚写了个用于IP过滤的Filter,支持对需要保护的URL列表进行指定IP段用户访问。
支持IP段*通配符配置,如:* --所有IP;192.168.* --所有192.168.开头的IP;192.168.0.* --所有0网段的IP;10.195.13.0-10.195.13.255 --也支持这种格式的IP段指定; 192.168.1.100 --单独IP指定;192.168.1*.50 --所有以192.168.1开头.50结尾的IP,即192.168.10.50-192.168.19.50; 192.168.100.50-192.168.199.50。
暂不支持如这种格式的指定:192.168.1*5.10、192.168.*5.10、192.168.*.2*,即*右边不能有数字,只能支持一个*号
支持IP段*通配符配置,如:* --所有IP;192.168.* --所有192.168.开头的IP;192.168.0.* --所有0网段的IP;10.195.13.0-10.195.13.255 --也支持这种格式的IP段指定; 192.168.1.100 --单独IP指定;192.168.1*.50 --所有以192.168.1开头.50结尾的IP,即192.168.10.50-192.168.19.50; 192.168.100.50-192.168.199.50。
暂不支持如这种格式的指定:192.168.1*5.10、192.168.*5.10、192.168.*.2*,即*右边不能有数字,只能支持一个*号
以下是代码:
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
/**
* 该过滤器用于过滤非指定列表中的IP不能访问指定功能权限。
*
* @author <a href="mailto:luzhich@cn.ibm.com">Lucas</a>
*
* @version 1.0 2011-11-29
*/
public class LoginIPFilter implements Filter {
protected Logger log = Logger.getLogger(LoginIPFilter.class);
// 当访问IP违规时重定向至哪个URL
private String redirectURL = null;
// 允许的IP访问列表
private Set<String> ipList = new HashSet<String>();
// 不在IP访问列表中的访问者不允许访问的URL列表
private List<String> protectedURL = new ArrayList<String>();
private Pattern pattern = Pattern
.compile("(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\."
+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\."
+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\."
+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})");
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) thro