1

IBMConnections用のIBMSocialBusiness ToolKitを使用してOpenSocialガジェットを構築しようとすると、Access-Control-Allow-Originエラーが発生します。

このガジェットに参加しているサーバーは3つあります。

  • 接続:ガジェットをホストするIBMConnections4.0サーバー
  • IBMSBT:SocialBusinessToolkitスクリプトとアプリをホストするサーバー
  • JESSE_API:ガジェットが使用するAPIをホストしているアプリケーションサーバー

ガジェットxmlは、CONNECTIONSによってJESSE_APIからロードされます。ガジェットのビューはスクリプトをロードし、JESSE_APIを呼び出します。Connectionsの一部にアクセスするためにSocialBusinessToolkitを使用したいので、ガジェットビューはIBMSBTからそれらのコンポーネントもロードします。

私は現在これをプロトタイプ化しています-Connections4.0APIを使用するだけでこれを機能させることができましたが、SBTライブラリを使用したいと思います。

開始するには、「Get My Communitys-Main Window」スニペットをガジェットのビューにドロップし、次のスクリプトを含めました。

<script type="text/javascript">
    var djConfig = {
        parseOnLoad: true
    };
</script>

<script src="//IBMSBT/sbt.dojo180/dojo/dojo.js"></script>
<script src="//IBMSBT/sbt.sample.web/library?ver=1.8.0"></script>

ガジェットをリロードすると、コンソールに次のエラーが表示されます。

XMLHttpRequest cannot load http://IBMSBT/sbt.sample.web/service/proxy/connections/http/CONNECTIONS/communities/service/atom/communities/my?ps=5

ガジェットはCONNECTIONSサーバーで実行されていたので、プロキシは必要ありません。このエンドポイントのプロキシをすぐに無効にする方法がわからなかったため、次のコードが実行される160行目の前にEndpoint.jsにブレークポイントを設定しました。

if(this.proxy) {
    args.url = this.proxy.rewriteUrl(args.url,this.proxyPath);
}

ブレークポイントに到達したら、this.proxy = nullを設定します。これにより、プロキシが使用されず、コミュニティ情報が正しく返されます。

私の質問は、これを別の方法で行うべきか、それとも現在使用している構造を考慮してプロキシの使用をバイパスする方法を追加すべきかということです。

4

2 に答える 2

1

Mark Wallace からの情報に基づいて、/library/エンドポイントが何をしているかをもう少し詳しく調べました。

私はそれをそのコードで正確に動作させることができませんでしたが、以下はうまく動作します:

<script data-dojo-config="parseOnLoad:true"
        src="//IBMSBT/sbt.dojo180/dojo/dojo.js.uncompressed.js"></script>

<script>
if(typeof _sbt=='undefined' || window._sbt_bridge_compat){
    _sbt=0;
    dojo.registerModulePath('sbt','http://IBMSBT/sbt/js/sdk/sbt');
    dojo.registerModulePath('sbt/_bridge','http://IBMSBT/sbt/js/sdk/_bridges/dojo-amd');
    dojo.registerModulePath('sbt/dojo','http://IBMSBT/sbt/js/sdk/dojo');
    define('sbt/config',['sbt/Proxy','sbt/_bridge/Transport','sbt/authenticator/Basic','sbt/Endpoint'],function(Proxy,Transport,Basic,Endpoint){
        window.sbt = {};
        sbt.Properties={
            "sbtUrl":"http:\/\/IBMSBT\/sbt\/js\/sdk"
        };
        sbt.Endpoints={
            'connections':new Endpoint({
                "baseUrl":"http:\/\/connectionsww.demos.ibm.com",
                "transport":new Transport({}),
                "authType":"basic",
                "authenticator":new Basic({}),
                "proxyPath":"connections"})
        };
        return sbt;
    });
}
</script>

script タグの内容は、基本的には/library/エンドポイントからの出力でした。定義には、私が削除したsbt.Endpoints.connections定義済みのプロキシ属性が含まれていました。

于 2012-12-07T21:59:24.833 に答える
1

この環境では、SDK プロキシを使用する必要はありません。最近、OAuth をサポートする作業の一環として、この領域にいくつかの変更を加えました。必要なのは、SDK ライブラリの初期化を構成して、ガジェット コンテキストで実行されていることを認識させることです。

acme.social.sample.webapp を見てみましょう:

  1. faces-config.xml には、OpenSocial で使用するための環境が表示されます。

    <!-- OpenSocial 環境 -->
    <マネージドBean>
        <managed-bean-name>openSocial</managed-bean-name>
        <マネージド ビーン クラス>com.ibm.sbt.jslibrary.SBTEnvironment</マネージド ビーン クラス>
        <マネージド ビーン スコープ>アプリケーション</マネージド ビーン スコープ>
        <管理物件>
            <property-name>エンドポイント</property-name>
            <value>acmeAirOS:acmeAir</value>
        </管理プロパティ>
    </マネージドBean>
    
  2. エンドポイント定義はガジェット エンドポイントを使用しました (faces-config.xml のさらに下)

    <マネージドBean>
        <マネージド ビーン名>acmeAirOS</マネージド ビーン名>
        <managed-bean-class>com.ibm.sbt.services.endpoints.GadgetOAuthEndpoint</managed-bean-class>
        <マネージド ビーン スコープ>セッション</マネージド ビーン スコープ>
        <管理物件>
            <property-name>URL</property-name>
            <value>%{acme.url}</value>
        </管理プロパティ>
    </マネージドBean>
    
  3. ガジェット xml (またはインポートされた html) でライブラリをロードするときに、OpenSocial 環境を使用する必要があることを示すパラメータを渡します。

    <script type="text/javascript" src="../../library?ver=1.8.0&context=gadget&env=openSocial"></script>
    
于 2012-12-07T11:44:27.727 に答える