2017-02-06 19 views
0

Я работаю над программным обеспечением Oracle Fusion Middleware 12.1.3.Как переопределить политику OWSM ссылки привязки REST в Soa Suite 12c?

В моем композита, я добавил «Rest Binding» Внешнее задание, для которого я добавил оракула/wss_http_token_client_policy и overrid в КСФ-ключ свойство.

В файлах, это выглядит как:

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 не требуется аутентификация. Как я могу изменить или удалить <wsp:PolicyReference ...>, когда композит развернут в среде DEV?

Глядя в Интернете, я нашел несколько примеров, чтобы переопределить PolicyReference, но "SOAP Bindings" Внешнее задание на SOA Suite 11g. Я не нашел ничего конкретного ни для служб 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, но «исходная» политика не удаляется. И это подтверждено на Enterprise Manager: на вкладке «Политики» CMProxyRS отображается oracle/wss_http_token_client_policy, отмечены Effective и Enabled.

переопределение политики в «composite.xml»

Я также попытался пересмотреть политику непосредственно в composite.xml, чтобы увидеть, если это возможно, чтобы отменить то, что определено в файле wsm-assembly.xml.Я попробовал несколько способов, различающихся по:

composite.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 и 12с

Образцы, которые я нашел в Интернете были разработаны для 11g, а не для 12с. Единственное поведение, которое может отличаться при установке политики через JDeveloper GUI, как:

  • В 12в, то <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 с разными политиками в разных средах?

Большое спасибо.

ответ

1

После развертывания проекта на окружающую среду DEV, то

1) Перейти к Oracle Fusion Middleware консоли. 2) Откройте проект. 3) В разделе вкладки политики OWSM вы можете добавить или удалить эту политику. 4) После удаления сохраните сеанс и повторите попытку.

Существует еще один вариант.

Вместо того чтобы использовать оракул/wss_http_token_client_policy политики вы можете создать новую собственную политику путем копирования разрешения всех типа политики типа оракул/wss_http_token_client_policy а.

В этой новой политике вы можете добавить пользователей или группы, которые вы создали в веб-журнале.

При развертывании проекта на сервере DEV не добавьте пользователя или группу в эту новую политику, и по умолчанию это позволит всем пользователям получить доступ к этой службе.

+0

Привет, благодарю вас за ответ. Фактически, я использовал ваше первое решение, но было слишком скучно переопределять вручную политику в консоли при каждом развертывании. Поэтому я написал сценарий WLST для автоматического удаления политики. Но я попробую ваше второе предложение, когда у меня будет время. Спасибо. –