gpt4 book ai didi

java - Spring MVC 路径匹配忽略双斜杠//

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:26 25 4
gpt4 key购买 nike

在 Spring Boot 应用程序中,我设置了一个带有 url 映射 /service1/* 的过滤器。这是使用 FilterRegistrationBean 完成的。

还有一个 Controller 映射到相同的模式:

   @RestController @RequestMapping(path = "/service1")
class Service1 {
...

问题:

执行 POST http://localhost:8080/service1/hello 按预期工作(即过滤器参与请求处理链,并调用服务 Controller )。但是,执行 http://localhost:8080//service1/hello(注意双斜杠)将绕过过滤器,但由于 Spring MVC 更宽松的路径匹配算法,无论如何都会到达 Controller 。

我读到可以自定义 Controller 路径匹配算法(链接:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-path-matching),但是我没有找到不忽略双斜杠的选项。

同样重要:此行为意味着任何受过滤器(不是 Spring 安全性,而是任何自定义过滤器)保护的 Controller 都可以被绕过,只需在 URL 的任何部分放置双斜杠。我的理解正确吗?您知道是否可以调整 MVC Controller 路径匹配,以便在路径匹配算法中不会忽略双斜杠?

最佳答案

没有任何迹象表明 Spring MVC 映射和通用 Servlet 过滤器的行为应该相同。 Ant-pattern 和 Servlet-mapping 是不同的标准,// 的解释可以折叠/规范化或不折叠。

我只想:

A) 为 /* 注册您的过滤器并在过滤器中进行匹配。

B) 设置自定义 AntPathMatcher在 Spring 。

C) 在您的过滤器之前注册一个过滤器,规范化 url 路径,并在 GET 的情况下拒绝服务 (HTTP 404) 或重定向 (HTTP 301) 到规范化路径。

关于java - Spring MVC 路径匹配忽略双斜杠//,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com