web-dev-qa-db-ja.com

ApacheTomcatにDELETEメソッドを受け入れさせる方法

私はRESTfulWebサービスのプロジェクトに取り組んでおり、ApacheTomcatとJAX-RSを使用しています。

クライアントからのDELETEリクエストを受け入れたいのですが、Advanced REST client ChromeプラグインからDELETEリクエストを送信すると、応答コード403Forbiddenが返されます。

では、どうすればApche TomcatにDELETEリクエストを受け入れさせることができますか?

12
VishalDevgire

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>
13
statueofmike

もう1つの提案として、呼び出しのURLを再確認し、目的のサーブレットを指していることを確認してください。

コードにサービスURLを誤って入力したときに、同じエラーが発生しました。私はapi/roles/Service/roles必要なときapi/rolesService/roles、タイプミスを修正するとエラーが解決しました。404が期待されますが、TomcatでDELETEを使用すると、403が返されます。

2
Tony BenBrahim

DELETEリクエストに対してTomcatから403Forbiddenを取得できる理由は次のとおりです。

このサーブレットによって処理される各HTTPDELETE要求で、次の処理が実行されます。

  • 静的リソースへの変更が許可されていない場合(構成パラメーターで設定)、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の仕様に準拠していることを確認してください。

2
Juned Ahsan