【问题标题】:Get filter init parameters in a servlet在 servlet 中获取过滤器初始化参数
【发布时间】:2010-11-30 11:40:16
【问题描述】:

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

   <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 的第一部分。所以容器必须知道初始化参数。我无权更改 Filter 类。

是否可以获得给定 HttpServletRequest 对象的初始参数值?

我能想到的唯一解决方案是将 web.xml 作为资源读取并尝试手动查找值。但感觉好像有更好的解决方案。

【问题讨论】:

    标签: java init-parameters


    【解决方案1】:

    为什么在你的 servlet 中需要它?过滤器参数属于过滤器。您的选择是:

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

    上下文参数示例。

    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");
    

    【讨论】:

    • 讽刺的是,我们经常需要 HttpServletResponseWrapper 实例中的过滤器参数,它不能直接访问过滤器本身。
    • 不适合我。我在 HttpServletResponseWrapper 中有代码。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2011-12-07
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多