如何使Apache Tomcat接受DELETE方法

Vis*_*ire 12 java jax-rs http-status-code-403 tomcat7 http-delete

我正在开发一个RESTful Web服务项目,我正在使用Apache Tomcat和JAX-RS.

我想接受来自客户端的DELETE请求,但每当我从Advanced REST客户端Chrome插件发送DELETE请求时,它都会给出响应代码403 Forbidden.

那么我怎样才能让Apche Tomcat接受DELETE请求呢?

sta*_*ike 13

由于我的CORS过滤器,Tomcat阻止了我的DELETE方法.

我需要在我的web.xml文件中注册新的过滤器.这是一个非常宽松的例子:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Accept,Accept-Encoding,Accept-Language,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Connection,Content-Type,Host,Origin,Referer,Token-Id,User-Agent, X-Requested-With</param-value>
    </init-param>
    <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, HEAD</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)


Jun*_*san 2

以下是您从 Tomcat 收到 DELETE 请求时收到 403 Forbidden 的原因:

在此 servlet 处理的每个 HTTP DELETE 请求上,应执行以下处理:

  • 如果不允许修改静态资源(通过配置参数设置),则返回 HTTP 状态 403(禁止)。

  • 如果尝试从 /META-INF 或 /WEB-INF 删除资源,则返回 HTTP 状态 403(禁止)。

  • 如果请求的资源不存在,则返回HTTP状态404(未找到)

  • 取消资源与包含此 Web 应用程序的静态资源的目录上下文的绑定。如果成功,返回 HTTP 状态 204(无内容)。否则,返回 HTTP 状态 405(方法不允许)。

来源:http ://tomcat.apache.org/tomcat-5.5-doc/catalina/funcspecs/fs-default.html

确保遵守 tomcat 规范以避免出现任何问题。

  • @mthmulders JAXRS 或任何其他 Web 服务框架位于 tomcat 请求拦截器后面。如果 tomcat 拒绝来自容器级别的请求,则您的 jaxrs 代码将不会被执行。 (2认同)