Spring Security 之 StrictHttpFirewall 坑

本文解决了一个在Spring Security中遇到的防火墙异常问题,详细介绍了三种解决方法,包括强制自定义防火墙、修改Swagger源码及调整防火墙配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个防火墙有个坑啊 啊 啊。。。。。

事情原由:项目初次引入security为swagger相关页面做验证

异常:org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.

 

解决:

解决方法:(注意方法下方趟过的撸)

1.强制自定义防火墙

    @Bean
    public HttpFirewall defaultHttpFirewall() {
        return new DefaultHttpFirewall();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        //新防火墙强制覆盖原来的
        web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
        //super.configure(web);
    }

2.修改swagger源码,修复//的bug

3.网上查到的方法(我自己测试无法使用这种方法)

    @Bean
    public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
        StrictHttpFirewall firewall = new StrictHttpFirewall();
        //此处开启不让检测‘/’符号
        firewall.setAllowUrlEncodedSlash(true);
        return firewall;
    }
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
        //super.configure(web);
    }

趟过的路:

方法一:使用方法已通过的确实可以避开“//”,但是跟过源码

改源码使用的uri是String类型,这个if即使含“//”也会返回false(即有效的url),感觉这个方法没啥用

方法二:正常没毛病,可用、

方法三:最坑

使用该方法,途中校验1可以通过,但是校验2中isNormalized(request)的检验"//"是写死的啊

ε=(´ο`*)))唉,最靠谱的方法二需要体力ε=ε=ε=(#>д<)ノ

各位路过的,如果有指正请及时赐教,挽救我于无尽苦海

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值