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?
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?
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).
In tomcat 7 può essere don su web.xml. vedi http://www.jvmhost.com/articles/block-ip-address-apache-tomcat-filter –
Non è possibile bloccare gli indirizzi IP utilizzando web.xml. Dovrebbe essere fatto a livello di server Web, contenitore o server applicazioni.
Se si utilizza Tomcat, è necessario utilizzare la specifica Valve per bloccare gli indirizzi IP. Maggiori informazioni possono essere trovati con i seguenti risorse
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
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
}
}
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):
hth
io personalmente che questo dovrebbe essere fatto a livello di amministrazione del server host dell'applicazione o a livello di rete (firewall). –