JeffJak JeffJak - 4 months ago 31
Java Question

Get filter init parameters in a servlet

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.

Answer

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