SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】

摘要:
打印后台错误日志,发现报错信息:TherequestwasrejectedbecausetheURLwasnotnormalized。之后与升级前相同环境对比发现,相同的功能,升级之后,URL中包含双斜杠。分析问题经过对比不同和错误信息,初步定位问题出在URL上。查询资料得知,SpringSecurity在高版本中增加了StrictHttpFirewall类,对URL校验更加严格。于是查看源码:privatestaticbooleanisNormalized{if{returntrue;}elseif{returnfalse;}else{inti;for{i=path.lastIndexOf;intgap=j-i;if{returnfalse;}if{returnfalse;}}returntrue;}}解决问题方法一:修改项目中出现“//”双斜杠的URL路径,哈哈方法二:自定义FireWall方式允许URL出现双斜杠“//”参考:Spring5.0.3RequestRejectedException:TherequestwasrejectedbecausetheURLwasnotnormalizedhttps://stackoverflow.com/questions/48453980/spring-5-0-3-requestrejectedexception-the-request-was-rejected-because-the-url/49116274创建允许在URL中使用斜线的自定义防火墙。

前言

最近LZ给项目框架升级, 从Spring1.x升级到Spring2.x, 在这里就不多赘述两个版本之间的区别以及升级的原因。

关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里。 这里我们讨论一个关于URL中包含双斜杠被拦截的问题。

发现问题

升级框架之后,测试一个功能时,发现报错Http 500, 第一时间怀疑是后台功能报错。打印后台错误日志,发现报错信息:The request was rejected because the URL was not normalized。

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】第1张

之后与升级前相同环境对比发现,相同的功能, 升级之后,URL中包含双斜杠。

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】第2张

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】第3张

分析问题

经过对比不同和错误信息,初步定位问题出在URL上。查询资料得知,Spring Security 在高版本中增加了StrictHttpFirewall类,对URL校验更加严格。于是查看源码:

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】第4张

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】第5张

@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
    StrictHttpFirewall firewall = new StrictHttpFirewall();
    firewall.setAllowUrlEncodedSlash(true);    
    return firewall;
}

解决问题

方法一:修改项目中出现“//”双斜杠的URL路径,哈哈

方法二:自定义FireWall方式允许URL出现双斜杠“//”

参考:Spring 5.0.3 RequestRejectedException: The request was rejected because the URL was not normalized

https://stackoverflow.com/questions/48453980/spring-5-0-3-requestrejectedexception-the-request-was-rejected-because-the-url/49116274

  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());
....
}

至此,问题解决。

免责声明:文章转载自《SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【鸿蒙开发板】使用AT命令连接WIFIMapReduce 优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JS读取粘贴板内容

1.1 监听onpaste事件 1.1.1 定义和用法 npaste 事件在用户向元素中粘贴文本时触发。 注意:虽然使用的 HTML 元素都支持 onpaste 事件,但实际上并非支持所有元素,例如 <p> 元素, 除非设置了 contenteditable 为 "true" (查看下文的更多实例)。 提示:onpaste 事件通常用于 typ...

vue:axios拦截器

拦截器分两类:请求拦截器和响应拦截器 一、请求拦截器 在请求发出之前设置一些信息。比如说设置请求头, 在use方法参数即第一个函数的形参中通过config来做信息的配置,配置完之后,必须把config返回,这样才能完成拦截器的功能。第二个函数用于处理错误的信息。 用拦截器的方式配置请求头会更加灵活。拦截器中可以通过config获取更多的信息,比如url地...

Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据

 本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据。 背景:   京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据,故需要借助于selenium模拟人的行为发起请求,输出源代码,然后解析源代码,得到我们想要的数据。 第一步:设置我们需要提取的字段,也就是在Scrap...

几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果。虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程。本文选自《架构解密:从分布式到微服务》一书,了解本书详情请点击阅读原文。...

js 获取图片url的Blob值并预览

1)使用 XMLHttpRequest 对象获取图片url的Blob值 //获取图片的Blob值 functiongetImageBlob(url, cb) { var xhr = newXMLHttpRequest(); xhr.open("get", url, true); xhr.responseTy...

SpringBoot 2 要不要升级

目录 前言 一、SpringBoot 简史 二、SpringBoot 2 的变化 1.配置的变更 2.JDK 版本升级 3.第三方类库升级 4.响应式编程支持 5.Data 支持 6.Web加强 7.HTTP/2 支持 8.其他增强 三、要不要升级 前言 在谈SpringBoot 2.x 之前,先来聊点别的: 首先是Java 语言,这门长期...