0

Is there a way to define in web.xml, that certain servlet Filter must be executed only once?

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
kofucii
  • 7,393
  • 12
  • 51
  • 79

2 Answers2

1

No. There the Filter is not for. Whatever the Filter is doing, should most likely be done by a ServletContextListener instead.

@WebListener
public class Config implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        // Do stuff during server startup.
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // Do stuff during server shutdown.
    }

}

When you're still not on Servlet 3.0 yet, remove @WebListener and register it in web.xml the old fasioned way as follows:

<listener>
    <listener-class>com.example.Config</listener-class>
</listener>

If you really insist in using a Filter, you could abuse the init() method for the job and just call chain.doFilter(request, response) in the doFilter() method.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
0

A round about way would be to have class variable and set it on first access and have all functional code in an 'if' block that checks this variable..