Issue
I registered the following filter for general content logging:
@Bean
public Filter getLoggingFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true);
filter.setIncludePayload(true);
filter.setMaxPayloadLength(5120);
return filter;
}
This filter catches on any request.
Now I'd like to apply this filter to only one specific @RequestMapping
method.
Question: is that possible at all?
Update: the following filterbean results in a 404 when accessing the path.
@Bean
public FilterRegistrationBean getLoggingFilter() {
FilterRegistrationBean filter = new FilterRegistrationBean(new CommonsRequestLoggingFilter());
filter.addUrlPatterns("/rest/my/specific/method/*");
return filter;
}
Solution
You need a FilterRegistrationBean
to specify URLs mappings. This fact is also mentioned in the reference guide.
@Bean
public Filter loggingFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true);
filter.setIncludePayload(true);
filter.setMaxPayloadLength(5120);
return filter;
}
Next to the filter definition add the FilterRegistrationBean
.
@Bean
public FilterRegistrationBean loggingFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(loggingFilter());
registration.addUrlPatterns("/rest/my/specific/method/*");
return registration;
}
This will attach the filter to the specified URL. Also be aware that the UrlPatterns
are patterns inside the root URL. So if your application is mapped on /rest
this filter won't be invoked.
Answered By - M. Deinum