Spring MVC 路径匹配忽略双斜杠 //
Spring MVC Path matching ignoring double slash //
在 Spring 引导应用程序中,我设置了一个过滤器 url 映射 /service1/*
。这是使用 FilterRegistrationBean
.
完成的
还有一个映射到相同模式的控制器:
@RestController @RequestMapping(path = "/service1")
class Service1 {
...
问题:
执行 POST http://localhost:8080/service1/hello
按预期工作(即过滤器参与请求处理链,并调用服务控制器)。但是,执行 http://localhost:8080//service1/hello
(注意双斜杠)将绕过过滤器,但由于 Spring MVC 更宽松的路径匹配算法,无论如何都会到达控制器。
我读到可以自定义控制器路径匹配算法(link:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-path-matching),但是我没有找到不忽略双斜杠的选项。
也很重要:此行为意味着任何受过滤器保护的控制器(不是 Spring 安全性,而是任何自定义过滤器)都可以被绕过,只需在URL。我的理解正确吗?
您知道是否可以调整 MVC 控制器路径匹配,以便在路径匹配算法中不会忽略双斜杠?
没有任何迹象表明 Spring MVC 映射和通用 Servlet 过滤器的行为应该相同。 Ant-pattern和Servlet-mapping是不同的标准,//
的解释可能是collapsed/normalized也可能不是。
我只想:
A) 为 /*
注册过滤器并在过滤器中进行匹配。
B) 在 Spring.
中设置自定义 AntPathMatcher
C) 在你的过滤器之前注册一个过滤器,规范化 url-path 并在 GET 的情况下拒绝服务 (HTTP 404) 或重定向 (HTTP 301) 到规范化路径。
在 Spring 引导应用程序中,我设置了一个过滤器 url 映射 /service1/*
。这是使用 FilterRegistrationBean
.
还有一个映射到相同模式的控制器:
@RestController @RequestMapping(path = "/service1")
class Service1 {
...
问题:
执行 POST http://localhost:8080/service1/hello
按预期工作(即过滤器参与请求处理链,并调用服务控制器)。但是,执行 http://localhost:8080//service1/hello
(注意双斜杠)将绕过过滤器,但由于 Spring MVC 更宽松的路径匹配算法,无论如何都会到达控制器。
我读到可以自定义控制器路径匹配算法(link:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-path-matching),但是我没有找到不忽略双斜杠的选项。
也很重要:此行为意味着任何受过滤器保护的控制器(不是 Spring 安全性,而是任何自定义过滤器)都可以被绕过,只需在URL。我的理解正确吗? 您知道是否可以调整 MVC 控制器路径匹配,以便在路径匹配算法中不会忽略双斜杠?
没有任何迹象表明 Spring MVC 映射和通用 Servlet 过滤器的行为应该相同。 Ant-pattern和Servlet-mapping是不同的标准,//
的解释可能是collapsed/normalized也可能不是。
我只想:
A) 为 /*
注册过滤器并在过滤器中进行匹配。
B) 在 Spring.
中设置自定义 AntPathMatcherC) 在你的过滤器之前注册一个过滤器,规范化 url-path 并在 GET 的情况下拒绝服务 (HTTP 404) 或重定向 (HTTP 301) 到规范化路径。