我有一个看起来像这样的过滤器:
<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。本质上,我已经在我的servlet中并执行了doFilter的第一部分。所以容器必须知道init参数。我没有权限更改Filter类。
是否可以在给定HttpServletRequest对象的情况下获取init-parameter值?
我能想到的唯一解决方案是将web.xml作为资源读取并尝试手动查找值。但感觉有更好的解决方案。
答案 0 :(得分:7)
为什么你的servlet开始需要它? Filter参数属于filter。您的选择是:
上下文参数示例。
的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");
答案 1 :(得分:1)
如果过滤器未声明为final,则可以对其进行扩展。例如,
public class MyFilter extends TheirFilter {
public void init(javax.servlet.FilterConfig filterConfig)
throws javax.servlet.ServletException {
super(filterConfig);
// Retrieve the parameter here
}
}
然后更改web.xml以将过滤器类更改为您的。