不确定这是Spring 5.0.3的一个bug,还是我这边的一个修复东西的新特性。
升级后,我得到了这个错误。有趣的是,这个错误只出现在我的本地机器上。使用HTTPS协议的测试环境中的相同代码工作正常。
继续…
我之所以出现此错误,是因为我加载结果JSP页面的URL是/location/thisPage.JSP
。正在评估代码请求。getRequestURI()
为我提供结果/WEB-INF/somelocation//location/thisPage.jsp
。如果我将JSP页面的URL固定到此location/thisPage。jsp
,一切正常。
所以我的问题是,我是否应该从代码中的< code>JSP路径中删除< code>/,因为这是前进所需要的。或者< code>Spring引入了一个错误,因为我的机器和测试环境之间的唯一区别是协议< code>HTTP和< code>HTTPS。
org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL was not normalized.
at org.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:123)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:194)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
我遇到了同样的问题:
Spring Boot版本=1.5.10
Spring Security版本=4.2.4
问题发生在endpoint上,其中ModelAndView
viewName是用前面的正斜杠定义的。例子:
ModelAndView mav = new ModelAndView("/your-view-here");
如果我去掉斜线,效果会很好。示例:
ModelAndView mav = new ModelAndView("your-view-here");
我还用RedirectView做了一些测试,它似乎可以在前面加一个正斜杠。
set允许网址编码斜杠(true)
对我不起作用。仍然有内部方法在具有双斜杠时是正则化
返回假
的。
我通过仅具有以下代码将“严格http防火墙
”替换为“默认http防火墙
”:
@Bean
public HttpFirewall defaultHttpFirewall() {
return new DefaultHttpFirewall();
}
对我来说效果不错。< br >使用< code>DefaultHttpFirewall有什么风险吗?
Spring Security文档在请求中提到了阻塞//的原因。
例如,它可能包含路径遍历序列(如/../)或多个正斜杠(//),这也可能导致模式匹配失败。一些容器在执行servlet映射之前将其规范化,但其他容器则没有。为了防止此类问题,FilterChainProxy使用HttpFirewall策略来检查和包装请求。默认情况下,将自动拒绝未规范化的请求,并删除路径参数和重复斜杠以进行匹配。
因此,有两种可能的解决方案-
步骤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());
....
}
步骤2是一个可选步骤,Spring启动只需要一个Bean声明为HttpFirewall
类型,它将在过滤器链中自动配置它。
Spring Security 5.4更新
在Spring Security 5.4及更高版本(Spring Boot
import org.springframework.security.web.firewall.RequestRejectedHandler;
import org.springframework.security.web.firewall.HttpStatusRequestRejectedHandler;
@Bean
RequestRejectedHandler requestRejectedHandler() {
return new HttpStatusRequestRejectedHandler();
}
我在生产中遇到大量错误 据推测,这是由我的url中的引起的,但我不知道它们是从哪里来的。我如何知道是什么url导致了这种情况?当你不知道发生了什么时,很难修复。 我确实意识到有一个相关的问题,但这并没有解决如何诊断有问题的URL。它只解决了如何关闭严格的防火墙。
我正在尝试将一个spring应用程序迁移到spring-boot。在tomcat服务器上运行应用程序时,我收到以下错误: 请求被拒绝,因为URL未规范化。 我已尝试在我的入口点类中添加以下 bean 来解决该错误。 错误日志: 我希望我的jsp页面加载,而不是抛出“白标错误”。
我正在开发一个文件上传功能。为此,我有一个spring boot web服务和客户机。 WebService:- 如果我删除文件并给出一个字符串,那么调用将继续进行。可能是什么问题。
问题内容: 不知道这是Spring 5.0.3的错误还是新功能可以修复我的问题。 升级后,出现此错误。有趣的是,此错误仅在我的本地计算机上。使用HTTPS协议的测试环境中的相同代码可以正常工作。 继续… 我收到此错误的原因是因为我用于加载结果JSP页面的URL是。评估代码会给我结果。如果我将JSP页面的URL修复为此,则一切正常。 所以我的问题是,我应该/从JSP代码的路径中删除吗,因为这是今后的
问题内容: 我在端口5000的node.js服务器上设置了CORS,如下所示: 我现在正尝试像这样在从硬盘打开的静态网页中使用JQuery发送AJAX POST请求: 该函数从不调用,并且我得到的唯一警报是来自XHR 处理程序的警报,其中包含以下错误: 我认为CORS配置合理, 我缺少什么? 编辑 :对于我而言,我能找到的最佳解决方案是从服务器发送页面: 问题答案: 这是我正在使用的代码。它位于我
我正在用Spring rest上传文件 我正在尝试发送内容类型为multipart/form data或multipart/form data的请求 然而,我一直得到一个错误:请求被拒绝,因为没有找到多部分边界 我不确定这是rest中的问题还是我的请求被打乱了。我正在使用restclient,将内容类型设置为多部分/表单数据,并从restclient发送文件 错误: 这是我的代码 网状物xml d