2010-05-19 26 views
5

¿Cómo puedo bloquear una dirección IP con un poco de configuración en web.xml?Cómo bloquear una dirección IP usando web.xml?

qué necesito un filtro? ¿Cómo puedo implementar uno?

+1

Yo personalmente creo que esto debe hacerse a nivel de administración en el servidor de aplicaciones host o a nivel de red (cortafuegos). –

Respuesta

6

No se puede hacer esto simplemente a través de config en web.xml, no. Sin embargo, un filtro de servlet sería un buen lugar para implementar tal cosa.

La interfaz Filter suministra la HttpServletRequest como parte de la cadena de invocación filtro, y de que se puede obtener la dirección IP del cliente (utilizando getRemoteAddr), y compara eso a su lista de direcciones permitidas.

Alternativamente, el servidor de aplicaciones específicas podrían apoyar el filtrado de IP a nivel de propiedad, sino que encaje en ese contenedor (que puede o no ser un problema para usted).

+0

En tomcat 7 se puede usar en web.xml. ver http://www.jvmhost.com/articles/block-ip-address-apache-tomcat-filter –

2

averiguar la configuración del filtro y todo lo que se deja como ejercicio para el lector.

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 
    } 
} 
0

me gustaría normalmente lograr esto con un servidor web proxy inverso, pero si realmente quiere definirlo en el servlet, no es un problema ...

He aquí un ejemplo para señalar que hacia la gestión de esto utilizando un filtro.

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

Tenga en cuenta que es imposible incluir las entradas web.xml, que sería algo como esto:

<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> 

Si está utilizando la primavera (como en la clase de filtro anterior), Es posible que desee utilizar un Spring DelegatingFilterProxy para simplificar la solución y otorgar a su filtro acceso a otros beans su applicationContext (potencialmente cargar direcciones IP del cliente desde propiedades o incluso una base de datos):

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

hth