2010-05-19 17 views
5

Come posso bloccare un indirizzo IP con qualche configurazione su web.xml?Come bloccare un indirizzo IP usando web.xml?

Ho bisogno di un filtro? Come posso implementarne uno?

+1

io personalmente che questo dovrebbe essere fatto a livello di amministrazione del server host dell'applicazione o a livello di rete (firewall). –

risposta

6

Non si può fare questo solo attraverso config nella web.xml, n. Un filtro servlet sarebbe un buon posto per implementare una cosa del genere, però.

L'interfaccia Filter fornisce la HttpServletRequest come parte dell'invocazione catena di filtri, e da questo si può ottenere l'indirizzo IP del client (utilizzando getRemoteAddr), e confrontare che alla tua lista di indirizzi consentiti.

In alternativa, il proprio server delle applicazioni specifico potrebbe supportare il filtro IP a livello proprietario, ma questo si blocca in quel contenitore (che potrebbe essere o non essere un problema per voi).

+0

In tomcat 7 può essere don su web.xml. vedi http://www.jvmhost.com/articles/block-ip-address-apache-tomcat-filter –

2

calcolo del filtro e tutto ciò che rimane come esercizio per il lettore.

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

avrei normalmente raggiungere questo obiettivo con un web server reverse proxy-, ma se si vuole veramente definire nel vostro servlet, non è un problema ...

Ecco un esempio di indicarvi verso la gestione di questo utilizzando un filtro.

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

Si noti che non include le voci web.xml, che sarebbe simile a questa:

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

Se stai usando Primavera (come nel filtro-classe superiore), potresti voler usare Spring DelegatingFilterProxy, per semplificare la soluzione e dare al tuo filtro l'accesso ad altri bean tuo applicationContext (potenzialmente carica gli indirizzi IP dei client da proprietà o anche un database):

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

hth