0

我正在研究 Oracle Fusion Middleware 12.1.3

在我的组合中,我添加了一个“Rest Binding”外部参考,为此我添加了一个oracle/wss_http_token_client_policy并覆盖了csf-key属性。

在文件中,它看起来像:

myComposite.BAS:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Generated by Oracle SOA Modeler version 12.1.3.0.0 at [01-06-2016 16:01]. -->
<composite name="MyCompositeBAS"
           revision="9.8.8"
           label="2016-06-01_16-01-48_442"
           mode="active"
           state="on"
           xmlns="http://xmlns.oracle.com/sca/1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
           xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
           xmlns:ui="http://xmlns.oracle.com/soa/designer/"
           xmlns:sca-ext="http://xmlns.oracle.com/sca/1.0-ext">

  [.....]

  <component name="MyCompositeBASProcess" version="2.0">
    <implementation.bpel src="BPEL/MyCompositeBASProcess.bpel"/>
    <componentType>
      <service name="mycompositebasprocess_client" ui:wsdlLocation="WSDLs/MyCompositeBASProcess.wsdl">
        <interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcess)"
                        callbackInterface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/MyCompositeBASProcess#wsdl.interface(MyCompositeBASProcessCallback)"/>
      </service>
      <reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl">
        <interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/>
      </reference>
    </componentType>
    <property name="bpel.config.oneWayDeliveryPolicy" type="xs:string" many="false">async.persist</property>
  </component>

  <reference name="CMProxyRS" ui:wsdlLocation="WSDLs/CMProxyRS.wsdl">
    <interface.wsdl interface="http://xmlns.oracle.com/GDDSOA/MyCompositeBAS/CMProxyRS#wsdl.interface(CMProxyRS_ptt)"/>
    <binding.rest config="Adapters/CMProxyRS.wadl" location="http://myUatServer/cmproxy/resources/v2/" />
  </reference>

  [....]

  <wire>
    <source.uri>MyCompositeBASProcess/CMProxyRS</source.uri>
    <target.uri>CMProxyRS</target.uri>
  </wire>
</composite>

wsm-assembly.xml :

<?xml version="1.0" encoding="windows-1252" ?>
<orawsp:wsm-assembly xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy">
  <sca11:policySet xmlns:sca11="http://docs.oasis-open.org/ns/opencsa/sca/200912" name="policySet"
               appliesTo="SCA-REST-REFERENCE()" attachTo="REFERENCE('CMProxyRS')" orawsp:highId="2" 
               xml:id="SCA-REST-REFERENCE__REFERENCE__CMProxyRS__">
    <wsp:PolicyReference xmlns:wsp="http://www.w3.org/ns/ws-policy"
                     DigestAlgorithm="http://www.w3.org/ns/ws-policy/Sha1Exc"
                     URI="oracle/wss_http_token_client_policy" orawsp:status="enabled" orawsp:id="2">
      <orawsp:OverrideProperty xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy" orawsp:name="csf-key"
                           orawsp:value="cmproxy.rest"/>
    </wsp:PolicyReference>
  </sca11:policySet>
</orawsp:wsm-assembly>

这在我的 UAT 和 PROD 环境中运行良好,其中设置了基本身份验证。

我对 DEV 环境的问题:REST 服务不需要任何身份验证。在 DEV 环境中部署复合材料时,如何更改或删除?<wsp:PolicyReference ...>

在网上看,我发现了几个覆盖 PolicyReference 的示例,但针对SOA Suite 11g上的“SOAP 绑定”外部引用。我没有找到任何特定于 REST 服务和 12c 的东西。

我试图改编我在网上找到的样本:

** 覆盖“配置计划”中的策略 **

我写了一个专门针对 DEV 环境的配置计划:

<?xml version="1.0" encoding="UTF-8"?>
<SOAConfigPlan xmlns:jca="http://platform.integration.oracle/blocks/adapter/fw/metadata"
               xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"      
               xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
               xmlns:edl="http://schemas.oracle.com/events/edl" xmlns="http://schemas.oracle.com/soa/configplan">

    <composite name="MyCompositeBAS">
        <import>
            <searchReplace>
                <search/>
                <replace/>
            </searchReplace>
        </import>
        <reference name="CMProxyRS">
            <binding type="rest">
                <attribute name="location">
                    <replace>http://myDevServer/cmproxy/resources/v2/</replace>
                </attribute>
                <wsp:PolicyReference URI="oracle/no_authentication_client_policy" orawsp:category="security" orawsp:status="enabled"/>
            </binding>
        </reference>
    </composite>
</SOAConfigPlan>

或者,我还尝试通过将我的配置计划中的最后一个块替换为以下内容来“禁用”(在配置计划中)定义的策略:wsm-assembly.xml

    [....]
    <reference name="CMProxyRS">
        <binding type="rest">
            <attribute name="location">
                <replace>http://myDevServer/cmproxy/resources/v2/</replace>
            </attribute>
            <wsp:PolicyReference orawsp:category="security" orawsp:status="disabled" URI="oracle/wss_username_token_client_policy"/>
            <!--wsp:PolicyReference URI="oracle/no_authentication_client_policy" orawsp:category="security" orawsp:status="enabled"/ -->
        </binding>
    </reference>
    [....]

但它不起作用。我知道配置计划已应用,因为我可以看到组合尝试访问 REST 服务器myDevServer,但未删除“原始”策略。这在企业管理器上得到了确认:在CMProxyRS策略选项卡上,oracle/wss_http_token_client_policy仍然可见,Effective并且Enabled已被选中。

覆盖“composite.xml”中的策略

我还尝试直接在 中重新定义策略,composite.xml以查看是否可以覆盖文件中定义的wsm-assembly.xml内容。我尝试了几种方法,不同的是:

复合.xml:

[....]
<binding.rest config="Adapters/CMProxyRS.wadl" location="http://myDevServer/cmproxy/resources/v2/" >
    <wsp:PolicyReference URI="oracle/wss_http_token_client_policy" orawsp:category="security" orawsp:status="disabled"/>
</binding.rest>
[....]

11g 和 12c 的区别

我在网上找到的样本是为 11g 设计的,而不是为 12c 设计的。当您通过 jDeveloper GUI 设置策略时,唯一可能不同的行为是:

  • 在 12c 中,<wsp:PolicyReference >标签被添加到wsm-assembly.xml文件中,用<sca11:policySet >;包裹。
  • 在11g中,好像<wsp:PolicyReference >是直接在composite.xml文件中添加了标签。(这就是为什么我在之前的测试中尝试直接在复合材料中设置策略......)

所以我也尝试<sca11:policySet >在我的配置计划中添加,但它失败了......

命名空间的差异

如果你照顾好wsp:,你会看到:

  • wsm-assembly.xml,它在这里定义:xmlns:wsp="http://www.w3.org/ns/ws-policy"
  • composite.xml和 中configuration plan,它在这里定义:xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"

所以我也尝试http://www.w3.org/ns/ws-policy在我的配置计划中强制命名空间,但部署失败(即未应用配置计划)。

我不知道我怎么能走得更远……

有人可以分享一个想法吗?是否有人在不同环境中使用不同策略成功查询 REST 服务?

非常感谢。

4

1 回答 1

1

在 DEV 环境中部署项目后,

1) 转到 Oracle 融合中间件控制台。2) 打开项目。3) 在 OWSM 策略选项卡下,您可以添加或删除此策略。4) 删除后保存会话并重试。

还有另一种选择。

除了使用 oracle/wss_http_token_client_policy 策略,您可以通过复制 oracle/wss_http_token_client_policy 类型的允许所有类型策略来创建自己的新策略。

在这个新策略中,您可以添加您在 weblogic 上创建的用户或组。

在 DEV 服务器上部署项目时,不要在此新策略中添加任何用户或组,默认情况下,这将允许所有用户访问此服务。

于 2017-04-05T18:54:23.080 回答