Как заблокировать IP-адрес с некоторой конфигурацией на web.xml?Как заблокировать IP-адрес с помощью web.xml?
Нужен ли мне фильтр? Как я могу его реализовать?
Как заблокировать IP-адрес с некоторой конфигурацией на web.xml?Как заблокировать IP-адрес с помощью web.xml?
Нужен ли мне фильтр? Как я могу его реализовать?
Вы не можете сделать это чисто по конфигурации в web.xml
, нет. Однако сервлет-фильтр был бы хорошим местом для реализации такой вещи.
Интерфейс Filter
поставляет HttpServletRequest
как часть цепи вызова фильтра, и от того, что вы можете получить IP-адрес клиента (с помощью getRemoteAddr
), и сравнить, что в список разрешенных адресов.
Кроме того, ваш конкретный сервер приложений может поддерживать фильтрацию IP-адресов на собственном уровне, но это блокирует вас в этом контейнере (что может или не может быть проблемой для вас).
В tomcat 7 можно надеть web.xml. см. http://www.jvmhost.com/articles/block-ip-address-apache-tomcat-filter –
Вы не можете блокировать IP-адреса, используя web.xml. Это должно быть сделано на уровне 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
выяснение конфигурации фильтра и все, что осталось в качестве упражнения для читателя.
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
}
}
я обычно добиться этого с обратной-прокси веб-сервер, но если вы действительно хотите, чтобы определить его в сервлет, это не проблема ...
Вот пример, чтобы указать вам для управления этим использованием фильтра.
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, чтобы упростить решение, и предоставить вашему фильтру доступ к другим компонентам вашего приложенияContext (потенциально загружать IP-адреса клиентов из свойств или даже базы данных):
НТН
Я лично думаю, что это должно быть сделано на уровне администратора на сервере хоста приложения или на сетевом уровне (брандмауэра). –