You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java REST服务POST请求返回403 Forbidden错误排查求助

解决Java REST服务POST请求403 Forbidden(GET正常)的问题

这种情况我太熟悉了——GET请求能正常走,POST却返回403,核心原因就是你的CorsFilter配置不完整,只放开了允许的源,但没处理**预检请求(OPTIONS)**和POST方法的权限,也没配置必要的请求头。

完整的CorsFilter配置(补充缺失的参数)

把你的web.xml里的CorsFilter配置替换成下面的完整版本:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,PUT,DELETE,OPTIONS</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,Authorization,X-Requested-With,Accept,Origin</param-value>
    </init-param>
    <init-param>
        <param-name>cors.support.credentials</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>cors.preflight.maxage</param-name>
        <param-value>3600</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

关键参数解释

  • cors.allowed.methods:必须明确包含OPTIONS和POST——浏览器在发送非简单POST请求(比如带application/json类型的请求体)之前,会先发送OPTIONS预检请求,确认服务器允许该操作,如果没配置OPTIONS,直接就会返回403。
  • cors.allowed.headers:列出前端可能用到的请求头,比如Content-Type(POST请求带JSON体时必须),确保预检请求能通过。
  • cors.preflight.maxage:设置预检请求的缓存时间,避免浏览器频繁发送OPTIONS请求,提升性能。

额外排查点

如果配置完还是403,那要检查:

  • 有没有其他安全拦截器?比如如果用了Spring Security,默认会开启CSRF防护,POST请求需要携带CSRF令牌,否则会被拦截。这种情况要么关闭CSRF(仅在非生产环境或无会话场景),要么配置前端携带令牌。
  • 确认POST请求的Content-Type是否在cors.allowed.headers里,比如如果用了multipart/form-data,要把这个头也加进去。

内容的提问来源于stack exchange,提问作者Salahudin Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:24:56