在servlet中获取过滤器init参数

时间:2009-09-22 17:07:05

标签: java init-parameters

我有一个看起来像这样的过滤器:

   <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作为资源读取并尝试手动查找值。但感觉有更好的解决方案。

2 个答案:

答案 0 :(得分:7)

为什么你的servlet开始需要它? Filter参数属于filter。您的选择是:

  1. 将所述参数移动到上下文init参数;您将能够从过滤器和servlet访问它。
  2. 在你的过滤器的doFilter方法中设置一个带参数值的属性(在请求中),让servlet读取它。
  3. 上下文参数示例。

    的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以将过滤器类更改为您的。