2017-06-08 24 views
1

Tomcat 8に配備されたRESTサービスをAngular 4から呼び出そうとしています。これらは両方とも別々のドメインで実行されているため、CORSの問題が予想されます。だから、Tomcatの/ confに/ web.xmlに、私は以下のフィルタを追加したCORS - Tomcatのrestサービスを角から呼び出す

<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,Authorization,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> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

これは私が認証を送っています、以来、私は角

var basicOptions:RequestOptionsArgs = { 
    url: 'http://server3:7000/myrest/info', 
    method: RequestMethod.Get, 
    search: null, 
    headers: new Headers(
    {'Authorization': 'Basic AG1hZG1pbjpkZW1vLmRlbW8=' }, 
    ), 
    body: null 
}; 

basicOptions.headers.append('Content-Type', 'application/json'); 

var reqOptions = new RequestOptions(basicOptions); 
var req = new Request(reqOptions); 
return this.http.request(req); 

からのGETリクエストを送信しています方法ですヘッダでは、Tomcatの 'cors.allowed.headers'パラメータにも追加されています。

ChromeからRESTサービスを呼び出すと、常に[無効なCORSリクエスト]エラー([ネットワーク]タブ - > [プレビュー])が表示されます。以下はブラウザのコンソールのエラーです

XMLHttpRequestはhttp://server3:7000/myrest/infoをロードできません。応答 要求をプリフライトするとアクセス制御チェックを通過しません。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。したがって、「http://localhost:4200」の原点は許可されません。 応答にHTTPステータスコード403がありました。

動作させるために何か他に必要なことはありますか?

+1

これはAngularとは関係ありません。 CORS要求をサポートし、必要なヘッダーで応答するようにサーバーを構成する必要があります。 –

答えて

1

GünterZöchbauerが正しい。 Angularとは関係ありません。追加したフィルタを使用しても、サーバーは他のドメインからの要求を受け入れるように構成されていません。サーバーを構成するには、これをチェックしてください。answer

カスタムHTTPヘッダーを送信するため、プリフライトリクエストがあることに注意してください(下の図を参照)。

関連する問題