2017-08-30 3 views
1

APIコードをホストするTomcat 9サーバーをセットアップしました。私が郵便配達員からそれを呼び出すとき、それはうまくいきます。私も、Tomcatのconf/web.xmlファイルに次のフィルタを追加しました:私はGET要求を送信するための次のjQueryコードを使用しています

<filter> 
<filter-name>CorsFilter</filter-name> 
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
<init-param> 
<param-name>cors.exposed.headers</param-name> 
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
</init-param> 
</filter> 

$(document).ready(function() 
{ 
    $.get("http://localhost:8080/myapp/webapp/cars", function(data, status){ 
     alert("Data: " + data + "\nStatus: " + status); 
}); 

それは次のようなエラーがスローされます。

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

クロスオリジン要求を許可するためにサーバー側で何かすべきことはありますか?

このエラーを取り除くために上記のjQueryリクエストを変更するにはどうすればよいですか?

多くの他の投稿は、でajaxメソッド呼び出しを使用することを提案していますか?どういうわけか、上記$.getの方法に変更を加えることは可能ですか?そうでない場合はGETPOSTの例を挙げてajaxメソッドを使用してCORSを有効にしてください。

<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,HEAD,OPTIONS,PUT</param-value> 
</init-param> 
<init-param> 
<param-name>cors.allowed.headers</param-name> 
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
</init-param> 
<init-param> 
<param-name>cors.exposed.headers</param-name> 
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
</init-param> 
<init-param> 
<param-name>cors.support.credentials</param-name> 
<param-value>true</param-value> 
</init-param> 
<init-param> 
<param-name>cors.preflight.maxage</param-name> 
<param-value>10</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>CorsFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

を...しかし、それはまだ働いていない:


EDITは

私はまた、次のように構成してみました。

+1

あなたはinit-paramを正しく設定していません。 [CorsFilterのドキュメント](https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter)を参照してください。 'cors.allowed.origins' init-paramを許可したい起点に設定する必要があります(またはすべての起点について*)。 –

+0

@peeskillet質問の*** EDIT ***を参考にしてください。まだ動作していません –

答えて

1

Tomcatで応答を処理/作成するときにヘッダーを追加する必要があります。

あなたのサーブレットのあなたの応答準備をするときには(すなわち、適切な方法を次の例POSTでは、)それを追加します:

public class MyServlet extends HttpServlet { 

    @Override 
    public void doPost(final HttpServletRequest request, 
         final HttpServletResponse response) throws ServletException { 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, OPTIONS"); 
     response.setHeader("Access-Control-Allow-Headers", "Content-Type"); 
    } 
} 

もし質問Where do I add this

response.setHeader("Access-Control-Allow-Origin", "*"); 
response.setHeader("Access-Control-Allow-Methods", "POST, OPTIONS"); 
response.setHeader("Access-Control-Allow-Headers", "Content-Type"); 

レスポンスあなたはサーブレットを実装しておらず、設定(例えばinit-parameters)を使ってそれをやりたければ、それをあなたのinit-parametersに追加することもできますが、そこにすべてのヘッダがあることを確認してくださいAccess-Control-Allow-OriginAccess-Control-Allow-Methods,Access-Control-Allow-Headersが適切な内容で設定されています。

まだ動作していない場合、どのヘッダーが正しく設定されていないかを判断するために、応答に設定されているヘッダーを確認すると役立ちます。

+0

どこに追加しますか? –

+0

それはうまくいった。どうもありがとうございました! –

関連する問題