Recently I'm getting the following warning when starting my spring-boot
application:
o.a.c.c.StandardContext: Suspicious URL pattern: [/rest/**] in context [], see sections 12.1 and 12.2 of the Servlet specification
Definition:
@Bean
public FilterRegistrationBean traceFilterRegistration(HttpTraceFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.addUrlPatterns("/rest/**");
return registration;
}
Question: is nowadays /rest/*
the same as /rest/**
so I could switch that safely?
My goal is obviously to catch any sub path under the rest path, eg also /rest/this/is/my/sub
.
CodePudding user response:
The specs for Servlet 3.1 and 4.0 state the following:
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/<contextroot>/. 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.
If the effective web.xml (after merging information from fragments and
annotations) contains any
Which means the pattern /rest/**
is an invalid one and should be changed to /rest/*
.