用于过滤IP的Filter

本文介绍了如何配置和使用过滤器来限制特定URL的访问,只允许预设的IP地址列表中的用户进行访问。通过在web.xml中设置过滤规则,可以确保只有在允许的IP地址才能访问如'/mail/sendMail.do'这样的关键操作。
摘要由CSDN通过智能技术生成
最近刚写了个用于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*,即*右边不能有数字,只能支持一个*号

以下是代码:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值