2009-09-22 2 views
3

У меня есть фильтр, который выглядит следующим образом:Получить параметры фильтра инициализации в сервлет

<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 и сервлетов. По сути, я уже в своем сервлете и выполнил первую часть doFilter. Поэтому контейнер должен знать параметр init. У меня нет доступа к изменению класса Filter.

Возможно ли получить значение параметра инициализации, заданное объектом HttpServletRequest?

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

ответ

5

Для чего вам это нужно в вашем сервлете для начала? Фильтрующий параметр принадлежит фильтру. Ваши варианты:

  1. Переместить указанный параметр в параметр контекста init; вы сможете получить доступ к нему как из фильтра, так и из сервлета.
  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"); 
+0

Иронически нередко нам нужны параметры фильтра в экземпляре HttpServletResponseWrapper, который не имеет прямого доступа к самому фильтру. – shabunc

+0

не работает для меня. У меня есть код внутри HttpServletResponseWrapper. –

0

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

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

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