Методы ограничения IP-адреса сервера Tomcat?

Я знал, что могу добавить Valve в context.xml на сервере tomcat, чтобы разрешить или запретить какой-либо IP-адрес:

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1" denyStatus="403" />

Кроме описанной выше конфигурации, Есть ли какой-либо другой способ, с помощью которого я могу настроить ограничение IP-адреса?

Например, могу ли я использовать текстовый файл или базу данных для хранения IP-адресов для предложения ограничения IP-адресов?

Большое тебе спасибо!!!


person Timmy Lo    schedule 08.07.2013    source источник


Ответы (1)


Вы можете динамически зарегистрировать фильтр удаленных адресов Tomcat.

http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_Address_Filter

Это выглядит так:

@WebListener
public class MyServletContextListener implements ServletContextListener {
  @Override
  public void contextInitialized(ServletContextEvent sce) {
    // Get IP addresses from the DB or text file.
    ...

    ServletContext sc = sce.getServletContext();
    FilterRegistration fr;
    fr = sc.addFilter("RemoteAddrFilter", "org.apache.catalina.filters.RemoteAddrFilter");
    fr.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
    fr.setInitParameter("allow", "127\\.0\\.0\\.1");
    fr.setInitParameter("denyStatus", "403");
  }
}
person Shinichi Kai    schedule 08.07.2013
comment
Спасибо за ваш ответ! Могу ли я узнать, как вызвать этот класс в context.xml после того, как я создал этот класс???? - person Timmy Lo; 08.07.2013
comment
Чтобы вышеуказанный класс работал, вам нужен Tomcat 7, но вам не нужны какие-либо изменения конфигурации. Приведенный выше класс реализует ServletContextListener и снабжен аннотацией @WebListener. Tomcat автоматически обнаруживает класс и вызывает contextInitialized при запуске веб-приложения. - person Shinichi Kai; 08.07.2013
comment
Спасибо еще раз! Какой/где файл мне нужно изменить, чтобы добавить класс MyServletContextListener? это bootstrap.jar в *C:\tomcat\bin*? - person Timmy Lo; 08.07.2013
comment
или мне нужно только создать файл jar, который включает класс MyServletContextListener, а затем поместить jar в c:\tomcat\bin? - person Timmy Lo; 08.07.2013
comment
Нет, вам нужно поместить класс в ваше веб-приложение (так же, как класс сервлета). - person Shinichi Kai; 08.07.2013
comment
Значит ли это, что я должен поместить класс в C:\tomcat\webapps\myapps\WEB-INF\lib? Спасибо! ты спас мне жизнь!! - person Timmy Lo; 09.07.2013
comment
Вам лучше поместить класс в WEB-INF/classes. - person Shinichi Kai; 09.07.2013
comment
могу ли я узнать, что @WebListener поддерживает только tomcat 7? - person Timmy Lo; 09.07.2013
comment
@Weblistner является частью Servlet 3.0. Только Tomcat 7 поддерживает Servlet 3.0. - person Shinichi Kai; 09.07.2013