在 servlet 中获取过滤器初始化参数

发布于 2024-08-05 00:42:44 字数 603 浏览 8 评论 0原文

我有一个如下所示的过滤器:

   <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 和 Servlet。本质上,我已经在我的 servlet 中并执行了 doFilter 的第一部分。所以容器必须知道初始化参数。我无权更改 Filter 类。

是否可以获取给定 HttpServletRequest 对象的 init-parameter 值?

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

I have a filter that looks like this:

   <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>

Since we are talking ServletFilter and Servlets. Essentially, I am already in my servlet and have executed the first part of the doFilter. So the container must know the init-parameter. I don't have access to change the Filter class.

Is it possible to get the init-parameter value given an HttpServletRequest object?

The only solution I can think of is to read the web.xml as a resource and try to find the value manually. But it feels like there is a better solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

揽清风入怀 2024-08-12 00:42:44

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

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

Why would you need it in your servlet to begin with? Filter parameter belongs to filter. Your options are:

  1. Move said parameter to context init parameter; you'll be able to access it from both filter and servlet.
  2. In your filter's doFilter method set an attribute (on request) with parameter value, have you servlet read it.

Context parameter example.

web.xml:

  <context-param>
    <param-name>param1</param-name>
    <param-value>value</param-value>
  </context-param>

your code:

String paramValue = getServletContext().getInitParameter("param1");

and the filter would have access to the same param value using:

String paramValue = filterConfig.getServletContext().getInitParameter("param1");
灯下孤影 2024-08-12 00:42:44

如果过滤器未声明为最终过滤器,您可以扩展它。例如,

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

然后更改 web.xml 以将过滤器类更改为您的。

If the filter is not declared final, you can extend it. For example,

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

Then change the web.xml to change the filter class to yours.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文