Tomcat9部署SpringBoot应用POST请求返回403如何排查?
问题说明
在Tomcat 9服务器上部署Spring Boot应用后,请求接口收到Tomcat返回的403响应,目前仅在访问日志中查到403记录,Swagger相关静态资源、v3/api-docs接口文档的GET请求均返回200/304正常状态,无法定位根因。
异常请求特征:
POST /ta/calculateWithPrices接口返回403,响应体长度为5
现存访问日志内容
0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:15 +0200] "GET /ta/swagger-ui/index.html?configUrl=/ta/v3/api-docs/swagger-config HTTP/1.1" 200 1417 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:15 +0200] "GET /ta/swagger-ui/swagger-ui.css HTTP/1.1" 200 143753 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:15 +0200] "GET /ta/swagger-ui/swagger-ui-standalone-preset.js HTTP/1.1" 200 337217 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:15 +0200] "GET /ta/swagger-ui/swagger-ui-bundle.js HTTP/1.1" 200 1091138 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:16 +0200] "GET /ta/v3/api-docs/swagger-config HTTP/1.1" 200 254 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:16 +0200] "GET /ta/swagger-ui/favicon-32x32.png HTTP/1.1" 200 628 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:16 +0200] "GET /ta/v3/api-docs HTTP/1.1" 200 1722 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:46:23 +0200] "POST /ta/calculateWithPrices HTTP/1.1" 403 5 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:48:49 +0200] "GET /ta/swagger-ui/index.html?configUrl=/ta/v3/api-docs/swagger-config HTTP/1.1" 304 - 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:48:49 +0200] "GET /ta/v3/api-docs/swagger-config HTTP/1.1" 200 254 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:48:49 +0200] "GET /ta/v3/api-docs HTTP/1.1" 200 1722 0:0:0:0:0:0:0:1 - - [15/Jun/2022:11:49:37 +0200] "POST /ta/calculateWithPrices HTTP/1.1" 403 5
排查方向
- Tomcat日志目录下的其余日志文件
localhost.日期.log:记录应用部署、容器级过滤器/监听器、本地请求处理的异常信息,容器层权限拦截、CSRF拦截的报错通常会输出在此catalina.日期.log:Tomcat核心运行日志,全局阀门(Valve)、安全约束、CORS规则触发的拦截会在此打印明细- 若配置了IP访问限制、管理端权限规则,相关拦截记录会输出在
host-manager.log、manager.log中
- Spring Boot应用自身日志
- 检查安全框架日志:如果集成了Spring Security、Shiro等安全组件,重点排查是否是权限校验未通过、CSRF防护拦截了未携带合法token的POST请求——GET请求正常、POST请求返回403是CSRF拦截的典型特征
- 检查自定义拦截器/过滤器日志:排查是否存在自定义的请求头校验、请求来源校验、参数校验逻辑,校验不通过直接返回403的情况
- 配置文件校验
- 检查Tomcat的
conf/web.xml、应用WEB-INF/web.xml中是否配置了<security-constraint>安全约束,限制了对应路径的POST方法访问权限 - 检查Tomcat的
server.xml、context.xml中是否配置了远程地址过滤阀门、请求方法限制、CORS拦截规则,拦截了目标POST请求 - 检查应用的CORS跨域配置,非允许来源的POST请求会被直接返回403
- 检查接口的请求方法映射配置,确认目标接口是否已正确声明允许POST方法访问
- 检查Tomcat的
内容的提问来源于stack exchange,提问作者user2023141
相关产品推荐
相关产品推荐

