Получить параметры инициализации фильтра в сервлете
У меня есть фильтр, который выглядит так:
<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 ответа
Зачем вам это нужно в вашем сервлете для начала? Параметр фильтра принадлежит фильтру. Ваши варианты:
- Переместить указанный параметр в контекстный параметр инициализации; вы сможете получить к нему доступ как из фильтра, так и из сервлета.
- В методе 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, чтобы изменить класс фильтра на свой.