FilterRegistrationBean url pattern doesn’t work

Tags: , , ,



I am registering a filter as shown below For log output

i want url pattern : /*/api/*

@Bean
public CommonsRequestLoggingFilter commonsRequestLoggingFilter() {
    CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
    filter.setIncludeClientInfo(true);
    filter.setIncludeHeaders(true);
    filter.setIncludePayload(true);
    filter.setIncludeQueryString(true);
    filter.setMaxPayloadLength(1000);
    return filter;
}


     @Bean
    public FilterRegistrationBean filterRegistrationBean () {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.addUrlPatterns("/*/api/*");

        return registrationBean;
    }

Answer

Since the code registers a Servlet Filter, the URL pattern must conform to the URL mappings supported by Servlets/Filters, as specified in the Servlet Specification:

12.2 Specification of Mappings

In the Web application deployment descriptor, the following syntax is used to define mappings:

  • A string beginning with a / character and ending with a /* suffix is used for path mapping.

  • A string beginning with a *. prefix is used as an extension mapping.

  • The empty string (“”) is a special URL pattern that exactly maps to the application’s context root, i.e., requests of the form http://host:port/<context-root>/. In this case the path info is / and the servlet path and context path is empty string (““).

  • A string containing only the / character indicates the “default” servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.

  • All other strings are used for exact matches only.

So, a URL can have only one wildcard, and it must be first or last:

  • /some/path/*
  • *.ext


Source: stackoverflow