Получить параметры инициализации фильтра в сервлете

У меня есть фильтр, который выглядит так:

   <filter>
      <filter-name>TestFilter</filter-name>
      <filter-class>org.TestFilter</filter-class>
      <init-param>
         <param-name>timeout</param-name>
         <param-value>30</param-value>
      </init-param>
   </filter>

Так как речь идет о ServletFilter и Servlets. По сути, я уже в своем сервлете и выполнил первую часть doFilter. Таким образом, контейнер должен знать параметр init. У меня нет доступа для изменения класса Filter.

Можно ли получить значение параметра init с помощью объекта HttpServletRequest?

Единственное решение, которое я могу придумать, - это прочитать web.xml как ресурс и попытаться найти значение вручную. Но кажется, что есть лучшее решение.

2 ответа

Решение

Зачем вам это нужно в вашем сервлете для начала? Параметр фильтра принадлежит фильтру. Ваши варианты:

  1. Переместить указанный параметр в контекстный параметр инициализации; вы сможете получить к нему доступ как из фильтра, так и из сервлета.
  2. В методе doFilter вашего фильтра установите атрибут (по запросу) со значением параметра, чтобы ваш сервлет прочитал его.

Пример параметра контекста.

web.xml:

  <context-param>
    <param-name>param1</param-name>
    <param-value>value</param-value>
  </context-param>

ваш код:

String paramValue = getServletContext().getInitParameter("param1");

и фильтр будет иметь доступ к тому же значению параметра, используя:

String paramValue = filterConfig.getServletContext().getInitParameter("param1");

Если фильтр не объявлен как окончательный, вы можете расширить его. Например,

public class MyFilter extends TheirFilter {
    public void init(javax.servlet.FilterConfig filterConfig) 
        throws javax.servlet.ServletException {
        super(filterConfig);
        // Retrieve the parameter here
    }
}

Затем измените web.xml, чтобы изменить класс фильтра на свой.

Другие вопросы по тегам