2016-05-26 8 views
0

anglejsとATG Rest APIを使用してポータルを構築していますが、APIを使用してセッション確認番号を取得しようとするとエラーが発生します:rest/model/atg/rest/SessionConfirmationActor/getSessionConfirmationNumberAccess Control-Allow-Origin ATG Rest API

Error:XMLHttpRequest cannot load http://IPNUMBER:Port/rest/model/atg/rest/SessionConfirmationActor/getSessionConfirmationNumber . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost ' is therefore not allowed access.

APIはPOSTMANで、ダイレクトブラウザのクエリから正常に動作しています。 これを手伝ってください。

答えて

0

シンプルなパイプラインサーブレットを作成し、RestPipelineコンフィグレーションに追加することをお勧めします。サーブレットは、すべてのRestリクエストにcorsヘッダーを挿入するだけです。

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import atg.servlet.*; 
import atg.servlet.pipeline.*; 

public class CORSHeaderServlet extends InsertableServletImpl{ 
    public CORSHeaderServlet() {} 
    public void service (DynamoHttpServletRequest request, 
         DynamoHttpServletResponse response) 
     throws IOException, ServletException 
    { 
    //add headers to response. 
    response.addHeader("Access-Control-Allow-Origin" ,"*"); 
    passRequest (request, response); 
    } 
} 
+0

返信いただきありがとうございます。私はATGウェブ商取引を使用しており、REST APIを有効にしています。パイプラインサーブレットを書く場所がわからないので、Hoping ATGは同じ機能をいくつか持っています。 –

+0

Oracleフォーラムから回答が1つありましたが、これを行う方法がわかりません。リンクはhttps://community.oracle.com/message/13287142#13287142です。** DAFパイプライン・サーブレットを拡張するにはInsertableServletImpl)、ビジネス要件に応じてヘッダーを設定します。** –

0

私はこのAPIを使用しませんでしたが、問題はかなり一般的です。ここでは例えば表情(またはCORSに関するその他のソース)を持っている:

How does Access-Control-Allow-Origin header work?

Webアプリケーションやサービスが異なるドメイン(起源)を持っている場合、サービスは、アプリケーションがデータを要求することを可能にするまで、これは動作しません。 。 Postmanを使用すると、Postmanはヘッダーを送信しないか、または許可されているオリジンを使用しないので動作します。私はそれがどのように動作するのか本当にわからないが、それは正常である。

ローカルで使用している場合は、単にテスト目的のためにアプリケーションやサービスとアプリの両方を主催同じ起源を持つことになります、あなたは2つの簡単な解決策があります。

  1. をあなたはWebセキュリティとWebブラウザ(例えばクロム)を実行することができます無効: Disable same origin policy in ChromeこれによりCORSが無効になり、問題が解決されます。
  2. Allow-Control-Allow-Origin:*というChrome拡張機能をインストールできます。有効にすると、サービスによって許可される発信元が送信されます。

ただし、サービスの原点が異なる場合は、アプリケーションでリクエストできるように設定する必要があります。


編集

注一つのこと。 GET以外のリクエストやカスタムヘッダを送信すると、ブラウザはまずOPTIONSリクエストを送信します。プリフライトリクエストと呼ばれています。あなたはサービスが適切に動作するためにそれを処理する必要があります。

+0

私はWEB LOGICを使用しています。これを動作させるには、ATG API設定またはWEB LOGICで何かを変更する必要がありますか?同じAPIに接続するためのアンドロイドアプリもあります。他の賢明なのは、Angularプロジェクトを同じサーバーにホストしているということです:) –

+0

私が言ったように、私はAPIを知らないので、何をすべきか正確には言えません。私は、 'Access-Control-Allow-Origin:*'のようなサービス送信ヘッダからの応答を作ることを目標としています。 '*'はすべてのアプリケーションがサービスを要求できるようにします。 '*'の代わりに、具体的なドメイン名を入力することができます。私はそれを可能にするために、apiの設定に何かがあるはずだと思います。もしそうでなければ、(例えば、いくつかの継承を使って)各応答にヘッダを手動で追加することができます。または、おそらくいくつかのフィルタを使用する - 私は今推測しています。それを機能させるためにOPTIONS要求にも追加することを忘れないでください。 – PJDev

+0

しかし、私はweblogicの新機能です。weblogicセキュリティグループを微調整したり、Access-Control-Allow-Originを追加してください。* weblogic –