禁用在IBM Social Business ToolKit中使用代理

时间:2012-12-06 18:12:22

标签: ibm-connections ibm-sbt

当我尝试使用IBM Social Business ToolKit为IBM Connections构建OpenSocial小工具时,我遇到了Access-Control-Allow-Origin错误。

我有3台服务器参与此小工具:

  • 连接:将托管小工具的IBM Connections 4.0服务器
  • IBMSBT:托管Social Business Toolkit脚本和应用程序的服务器
  • JESSE_API:我的应用服务器托管小工具将使用的API

小工具xml由CONNECTIONS从JESSE_API加载。小工具的视图加载脚本并调用JESSE_API。我想使用社交业务工具包来访问Connections的部分内容,以便小工具视图也从IBMSBT加载这些组件。

我目前只是对此进行原型设计 - 我能够使用Connections 4.0 API完成此工作,但宁愿使用SBT库。

为了开始使用,我只是将“获取我的社区 - 主窗口”代码段放入我的小工具视图中,并包含以下脚本:

<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,这会导致不使用代理并正确返回社区信息。

我的问题是,我应该采取不同的方式,还是应该添加一种方法来绕过我目前正在使用的结构使用代理?

2 个答案:

答案 0 :(得分:1)

不需要在此环境中使用SDK代理。最近我们在这个领域做了一些改变,作为支持OAuth工作的一部分。您需要做的是配置SDK库初始化,以便它知道它在Gadget上下文中运行。

看一下acme.social.sample.webapp:

  1. 在faces-config.xml中,您将看到一个用于OpenSocial

    的环境
    <!--  OpenSocial Environment -->
    <managed-bean>
        <managed-bean-name>openSocial</managed-bean-name>
        <managed-bean-class>com.ibm.sbt.jslibrary.SBTEnvironment</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>endpoints</property-name>
            <value>acmeAirOS:acmeAir</value>
        </managed-property>
    </managed-bean>
    
  2. 端点定义使用小工具端点(在faces-config.xml中进一步向下)

    <managed-bean>
        <managed-bean-name>acmeAirOS</managed-bean-name>
        <managed-bean-class>com.ibm.sbt.services.endpoints.GadgetOAuthEndpoint</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>url</property-name>
            <value>%{acme.url}</value>
        </managed-property>
    </managed-bean>
    
  3. 在小工具xml(或导入的html)中加载库时,传递一个参数来指示应该使用OpenSocial环境

    <script type="text/javascript" src="../../library?ver=1.8.0&context=gadget&env=openSocial"></script>
    

答案 1 :(得分: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>

脚本标记的内容基本上是/library/端点的输出。 sbt.Endpoints.connections定义最初包含我删除的已定义代理属性。