部署Spring Boot应用至Tomcat时遇URL未规范化请求被拒问题
我来帮你排查这个问题,这个错误一般和Tomcat的URL规范化安全校验机制有关,咱们一步步来分析解决:
先检查请求URL的规范性
先确认你输入的地址有没有异常,比如是不是不小心输入了双斜杠(像http://localhost:8080//serviceapp/)、或者包含../这类路径遍历字符?Tomcat默认会拦截这类不符合规范的URL,先确保你的请求地址是完全正确的http://localhost:8080/serviceapp/,没有多余的特殊字符。调整Tomcat的安全配置(谨慎使用)
如果你的URL确实没问题,但还是被拦截,可以修改Tomcat的配置来放宽规范化检查:
找到Tomcat目录下的conf/context.xml,在<Context>标签里添加相关属性:<Context antiResourceLocking="false" privileged="true" normalize="false" />或者在
conf/server.xml的<Host>节点下调整Valve的参数,比如设置allowUnsafeLegacyRedirects="true"。不过要注意,关闭规范化检查会降低Tomcat的安全防护能力,只建议在测试环境或者确定业务场景安全的情况下使用。确认war包部署路径
检查你的Spring Boot war包部署到Tomcat的webapps目录后,文件名是不是serviceapp.war?如果war包名称是其他的,访问路径也要对应调整,比如包名是my-service.war,那访问地址应该是http://localhost:8080/my-service/,路径不匹配也可能触发这个错误。排查Spring Boot的Servlet/Filter配置
如果你在应用里自定义了Servlet、Filter或者使用了特殊的@RequestMapping路径规则,可能会导致Tomcat对URL的解析出现异常。检查一下这些配置,确保路径映射都是标准的格式,没有使用非常规的字符或者匹配规则。
内容的提问来源于stack exchange,提问作者learner

