英文:
FilterRegistrationBean url pattern doesn't work
问题
我正在注册一个过滤器,如下所示,用于日志输出:
我想要的 URL 模式:/*/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;
}
英文:
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;
}
答案1
得分: 6
由于代码注册了一个Servlet Filter
,URL模式必须符合Servlets/Filters支持的URL映射,如Servlet规范中所指定的:
> 12.2 映射规范
>
> 在Web应用程序部署描述符中,以下语法用于定义映射:
>
> - 以 /
字符开头并以 /*
后缀结尾的字符串用于路径映射。
>
> - 以 *.
前缀开头的字符串用作扩展名映射。
>
> - 空字符串(“”)是一个特殊的URL模式,与应用程序的上下文根完全匹配,即形式为 http://host:port/<context-root>/
的请求。在这种情况下,路径信息是 /
,Servlet路径和上下文路径为空字符串(““)。
>
> - 仅包含 /
字符的字符串表示应用程序的“默认” Servlet。在这种情况下,Servlet路径是请求URI减去上下文路径,路径信息为null。
>
> - 所有其他字符串仅用于精确匹配。
因此,一个URL只能有一个通配符,并且它必须是第一个或最后一个:
/some/path/*
*.ext
英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论