Spring Security documentation提到了阻塞请求的原因。
例如,它可能包含路径遍历序列(例如/../)或多个正斜杠(//),这也可能导致模式匹配失败。一些容器在执行servlet映射之前将它们标准化,但其他容器则没有。为了避免此类问题,FilterChainProxy使用HttpFirewall策略检查并包装请求。默认情况下,未规范化的请求将自动被拒绝,并且出于匹配目的,将删除路径参数和重复的斜杠。
因此,有两种可能的解决方案-
- 删除双斜杠(首选方法)
- 通过使用以下代码来自定义StrictHttpFirewall,在Spring Security中允许//。
步骤1 创建自定义防火墙,以允许在URL中使用斜杠。
@Beanpublic HttpFirewall allowUrlEnpredSlashHttpFirewall() { StrictHttpFirewall firewall = new StrictHttpFirewall(); firewall.setAllowUrlEnpredSlash(true); return firewall;}步骤2,然后在Websecurity中配置此bean
@Overridepublic void configure(WebSecurity web) throws Exception { //@formatter:off super.configure(web); web.httpFirewall(allowUrlEnpredSlashHttpFirewall());....}步骤2是可选步骤,Spring Boot仅需要声明一个类型为bean的bean HttpFirewall



