目录
场景:
原因:
解决方案:
总结:
场景:
本地项目访问突然提示如下
严重: 在路径为[/activiti-webapp-rest2]的上下文中,servlet[dispatcher]的Servlet.service()引发异常
org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "//"
atorg.springframework.security.web.firewall.StrictHttpFirewall.rejectedBlocklistedUrls(StrictHttpFirewall.java:535)
atorg.springframework.security.web.firewall.StrictHttpFirewall.getFirewalledRequest(StrictHttpFirewall.java:505)
原因:
有的请求路径中含有 //双短横线
http://localhost:8081/activiti-rest/service//repository/models?key=pid-06733e2d-758f-406c-ab7b-bf1b802952ff
解决方案:
在@Conifguration配置文件中加入如下bean
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
StrictHttpFirewall firewall = new StrictHttpFirewall();
//此处可添加别的规则,目前只设置 允许双 //
firewall.setAllowUrlEncodedDoubleSlash(true);
return firewall;
}
总结:
1.开发过程最好是按照规范开发,可以避免诸如此类低级问题。
比如项目中前缀是
http://localhost:8081/activiti-rest/service
那么controller统一
/repository/models?key=pid-06733e2d-758f-406c-ab7b-bf1b802952ff
这样的话拼接到一起就不会有双横线问题了
2.当然如果允许路径中存在双横线则可以在security中添加配置
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirewall() {
StrictHttpFirewall firewall = new StrictHttpFirewall();
//此处可添加别的规则,目前只设置 允许双 //
firewall.setAllowUrlEncodedDoubleSlash(true);
return firewall;
}