目录
前言
公司在推项目框架升级, 从 Spring1.x 升级到 Spring2.x , LZ 在给服务升级的时候出现一个关于 URL 中包含双斜杠被拦截的问题。
发现问题
升级框架之后,马上收到短信和邮件报警,查看 nginx 日志发现报500的全是 URL 中包含双斜杠的请求,通过 nginx 的 traceId 定位到具体的应用服务机器,发现报错如下:
分析问题
从报错 “The request was rejected because the URL was not normalized” 字面意思可以猜测一下,应该是 URL 中多了一个斜杠。为了验证我们的猜想我们通过报错的堆栈信息进入 StrictHttpFirewall 类源码分析:
解决问题
方法一:修改项目中出现 “//” 双斜杠的 URL 路径。
方法二:自定义 FireWall 方式允许 URL 出现双斜杠 “//”。
1. 创建允许在URL中使用斜线的自定义防火墙。
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
StrictHttpFirewall firewall = new StrictHttpFirewall();
firewall.setAllowUrlEncodedSlash(true);
return firewall;
}
2. 在 WebSecurity 中配置这个bean。
@Override
public void configure(WebSecurity web) throws Exception {
//@formatter:off
super.configure(web);
web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
....
}
参考文档
微信公众号:「新猿一马」,微信扫一扫:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/9567.html