如何使用web.xml阻止IP地址?

时间:2010-05-19 21:39:03

标签: java web.xml servlet-filters

如何在web.xml上使用某些配置阻止IP地址?

我需要过滤器吗?我该如何实施?

4 个答案:

答案 0 :(得分:6)

你不能完全通过web.xml中的配置来做到这一点,没有。不过,servlet过滤器是实现这种功能的好地方。

Filter接口提供HttpServletRequest作为过滤器链调用的一部分,从中可以获取客户端的IP地址(使用getRemoteAddr),并将其与您的允许地址列表。

或者,您的特定应用服务器可能支持专有级别的IP过滤,但会将您锁定到该容器中(这对您来说可能是也可能不是问题)。

答案 1 :(得分:3)

您无法使用web.xml阻止IP地址。它应该在Webserver,Container或Application Server级别完成。

如果您使用的是Tomcat,则需要使用Valve规范来阻止IP地址。可以使用以下资源找到更多信息

http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html

http://hcmc.uvic.ca/blogs/index.php?blog=30&p=2658&more=1&c=1&tb=1&pb=1

答案 2 :(得分:2)

找出过滤器配置以及留给读者的所有内容。

import javax.servlet.*;
import java.io.IOException;

public class BlackListFilter implements Filter
{
    private String blacklistedip;

    @Override
    public void init(final FilterConfig filterConfig) throws ServletException
    {
        this.blacklistedip = filterConfig.getInitParameter("blacklistedip");
    }

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain filterChain) throws IOException, ServletException
    {
        if (!request.getRemoteAddr().equals(this.blacklistedip))
        {
            filterChain.doFilter(request, response);
        }
    }

    @Override
    public void destroy()
    {
        // nothing
    }
}

答案 3 :(得分:1)

我通常使用反向代理Web服务器来实现这一点,但是如果你真的想在你的servlet中定义它,那不是问题......

以下是一个示例,指出您使用过滤器来管理它。

http://www.java2s.com/Code/Java/Servlets/IPFilter.htm

请注意,它不包含web.xml条目,如下所示:

    <filter>
       <filter-name>IPFilter</filter-name>
       <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
       <filter-name>IPFilter</filter-name>
       <servlet-name>MyServlet123</servlet-name>
    </filter-mapping>

如果您正在使用Spring(如上面的过滤器类),您可能希望使用Spring DelegatingFilterProxy来简化解决方案,并让您的过滤器访问您的applicationContext的其他bean(可能从中加载客户端IP地址)属性甚至是数据库):

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/web/filter/DelegatingFilterProxy.html

HTH