java - FilterRegistrationBean 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;
}
解决方案
由于代码注册了 Servlet Filter
,因此 URL 模式必须符合 Servlet/Filters 支持的 URL 映射,如 Servlet 规范中所指定:
12.2 映射规范
在 Web 应用程序部署描述符中,使用以下语法来定义映射:
以字符开头
/
并以后缀结尾的字符串/*
用于路径映射。以前缀开头的字符串
*.
用作扩展映射。空字符串 ("") 是一种特殊的 URL 模式,它精确地映射到应用程序的上下文根,即表单的请求
http://host:port/<context-root>/
。在这种情况下,路径信息是/
,servlet 路径和上下文路径是空字符串(“”)。仅包含字符的字符串
/
表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。所有其他字符串仅用于完全匹配。
因此,一个 URL 只能有一个通配符,并且必须是第一个或最后一个:
/some/path/*
*.ext
推荐阅读
- python - 如何根据行从熊猫数据框中绘制,所以每列都是一个点
- android - 使用 Glide 调整 ImageView 的高度以匹配原始图像的纵横比
- swift - UITableViewCell 中带有多行标签的 UIStackView 高度不正确
- javascript - 仅在加载页面时如何使用javascript调用JSF支持bean方法
- python - 如何下载更快的 youtube 音频或视频文件?
- sql-server - SQL Server Profiler 在不同系统上跟踪相同查询的不同结果
- julia - 如何在 Julia ccall 中指定相对库路径?
- typescript - 如何在本机反应中转换方法中的名称
- macos - 在 Xamarin 中使用 NSAppleEventsUsageDescription 获取登录项
- ios - 如果我们在很长一段时间后使用 MSGraphSDK,发送邮件功能在 iOS 中不起作用