首页 > 解决方案 > Spring Boot 过滤器 URL 映射

问题描述

我的控制器的请求映射是这样的:

/hospital/{hospitalId}/department/{departmentId}/doctors

我尝试添加验证所需过滤器的模式:

/hospital/*/department/*/doctors

但它不起作用。有机会完成这项工作吗?

标签: spring-mvcspring-boot

解决方案


过滤器的映射不是您在 Spring 中习惯的 Ant 样式映射,而是Servlet 规范中定义的映射。在第 12.2 节中它说:

以下语法用于定义映射:

  • 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。
  • 以“*”开头的字符串。前缀用作扩展映射。
  • 空字符串 ("") 是一种特殊的 URL 模式,它精确映射到应用程序的上下文根,即http://host:port/ / 形式的请求。在这种情况下,路径信息是“/”,servlet 路径和上下文路径是空字符串(“”)。
  • 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。
  • 所有其他字符串仅用于完全匹配。

/hospital/*/department/*/doctors仅符合最终项目符号的标准,因此被视为完全匹配。

在 servlet 规范范围内,您可以做的最好的事情是/hospital/*在过滤器的代码中使用然后进行一些辅助匹配。您可以使用 Spring Frameworkorg.springframework.util.AntPathMatcher来执行此操作。


推荐阅读