私はRESTfulWebサービスのプロジェクトに取り組んでおり、ApacheTomcatとJAX-RSを使用しています。
クライアントからのDELETEリクエストを受け入れたいのですが、Advanced REST client ChromeプラグインからDELETEリクエストを送信すると、応答コード403Forbiddenが返されます。
では、どうすればApche TomcatにDELETEリクエストを受け入れさせることができますか?
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>
もう1つの提案として、呼び出しのURLを再確認し、目的のサーブレットを指していることを確認してください。
コードにサービスURLを誤って入力したときに、同じエラーが発生しました。私はapi/roles/Service/roles
必要なときapi/rolesService/roles
、タイプミスを修正するとエラーが解決しました。404が期待されますが、TomcatでDELETEを使用すると、403が返されます。
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の仕様に準拠していることを確認してください。