Как заблокировать IP-адрес с помощью web.xml?

Как я могу заблокировать IP-адрес с некоторой конфигурацией на web.xml?

Мне нужен фильтр? Как я могу реализовать тот?

5
задан BalusC 19 May 2010 в 21:53
поделиться

4 ответа

Вы не можете сделать это только через конфигурацию в web.xml , нет. Однако фильтр сервлетов был бы хорошим местом для реализации такой вещи.

Интерфейс Filter предоставляет HttpServletRequest как часть вызова цепочки фильтров, и отсюда вы можете получить IP-адрес клиента (используя getRemoteAddr ) и сравните его со списком разрешенных адресов.

В качестве альтернативы, ваш конкретный сервер приложений может поддерживать фильтрацию IP на частном уровне, но это блокирует вас в этом контейнере (что может быть, а может и не быть проблемой для вас).

6
ответ дан 13 December 2019 в 05:31
поделиться

Вы не можете блокировать IP-адреса с помощью web.xml. Это должно быть сделано на уровне веб-сервера, контейнера или сервера приложений.

В случае, если вы используете 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

3
ответ дан 13 December 2019 в 05:31
поделиться

, выясняя конфигурацию фильтра и все, что остается в качестве упражнения для читателя.

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
    }
}
2
ответ дан 13 December 2019 в 05:31
поделиться

Я бы обычно добивался этого с помощью веб-сервера с обратным проксированием, но если вы действительно хотите определить это в своем сервлете, это не проблема ...

Вот пример укажет вам на управление этим с помощью фильтра.

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, чтобы упростить решение и предоставить вашему фильтру доступ к другим bean-компонентам вашего applicationContext (потенциально загружать IP-адреса клиентов из свойств или даже из базы данных):

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

hth

1
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: