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

java技术文章

2018-11-13

744

0

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

spring security配置拦截请求报错:不是正规的URL请求被拒绝。

解决办法:

Spring security文档提到请求阻塞的问题。

例如:它可能包含路径遍历序列(像/../)或者多转发斜杠(//),也可能是因为模式匹配失败。一些正规化的容器在执行Servlet映射之前输出这些异常,但是其它的不会。为了保护这里不利的问题,FilterChainProxy使用HttpFirewall 策略去检查和封装请求。非正规的请求默认自动拒绝,路径参数和和双斜杠为了匹配目的被移除。

因此这里有两个可能的解决方法:

1、移除双斜杠(首选的方式)

2、在spring security通过自定义的StrictHttpFirewall允许双斜杠,使用如下代码

步骤1,创建自定义firewall,允许斜杠URL

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

步骤2 接着在配置webseurity配置当前bean

@Override
public void configure(WebSecurity web) throws Exception {
    //@formatter:off
    super.configure(web);
    web.httpFirewall(allowUrlEncodedSlashHttpFirewall());
....
}

步骤2是一个可选步骤,spring boot仅仅需要一个bean去申明HttpFirewall.

欢迎访问:www.hongfu951.com博客,查看更多文章

发表评论

全部评论:0条

鸿福951

努力打造一个好用的webui

热评文章

推荐文章