【问题标题】:How to call a secure proxy service via simple proxy service in WSO2 ESB如何通过 WSO2 ESB 中的简单代理服务调用安全代理服务
【发布时间】:2015-02-19 16:02:28
【问题描述】:

我在 WSO2 ESB 中创建了一个安全代理服务。我关注了这个tutorial。 现在我想通过使用另一个代理服务来调用这个服务。但是当我从 SoapUI 向简单的代理服务发送请求时,我遇到了错误。我无法弄清楚的是如何将安全配置传递给代理服务。

注意:我使用的是 WSO2 ESB 4.8.1。

安全代理服务代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="EchoProxy2"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log level="full" separator="InSequence Log"/>
      </inSequence>
      <outSequence>
         <log level="full" separator="Out Sequence Called"/>
         <send/>
      </outSequence>
      <endpoint>
         <address uri="http://wi1-Inspiron-3521:8280/services/echo"/>
      </endpoint>
   </target>
   <parameter name="disableREST">true</parameter>
   <parameter name="ScenarioID">scenario2</parameter>
   <enableSec/>
   <policy key="conf:/repository/axis2/service-groups/EchoProxy2/services/EchoProxy2/policies/SigOnly"/>
   <description/>
</proxy>

简单代理服务代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="CallEchoProxy"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log level="full" separator="*Calling Proxy In Sequence"/>
      </inSequence>
      <outSequence>
         <log level="full"
              separator="Calling Proxy Out Sequence"/>
      </outSequence>
      <endpoint>
         <address uri="http://wi1-Inspiron-3521:8280/services/EchoProxy2"/>
      </endpoint>
   </target>
   <description/>
</proxy>

日志错误:

[2015-02-19 11:22:48,718] ERROR - ServerWorker Error processing POST request for : /services/EchoProxy2
org.apache.axis2.AxisFault: Missing wsse:Security header in request
    at org.apache.rampart.handler.RampartReceiver.setFaultCodeAndThrowAxisFault(RampartReceiver.java:180)
    at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:99)
    at org.apache.axis2.engine.Phase.invokeHandler(Phase.java:340)
    at org.apache.axis2.engine.Phase.invoke(Phase.java:313)
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:261)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:167)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:411)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.rampart.RampartException: Missing wsse:Security header in request
    at org.apache.rampart.RampartEngine.process(RampartEngine.java:146)
    at org.apache.rampart.handler.RampartReceiver.invoke(RampartReceiver.java:92)
    ... 10 more

问题: 我无法理解如何将安全配置传递给我的简单代理服务。以便它可以与安全服务通信并取回响应。

【问题讨论】:

    标签: apache wso2 wso2esb


    【解决方案1】:

    您有一个安全代理,也有一个不安全的代理。当您向非安全代理发送消息时,它必须调用安全代理。因此,您的非安全代理必须调用安全端点。在这里,安全端点是您的安全代理。要调用安全端点,您必须将 WS-Security 策略附加到端点配置中。您参考 this 博客,其中解释了如何调用安全端点。如果您按照正确的步骤操作,我想您可以解决此问题。

    【讨论】:

    • 我按照博客中提到的步骤进行操作。但我收到以下错误。
    • [2015-02-19 14:34:07,839] 错误 - Axis2Sender 发送消息时出现意外错误 org.apache.axis2.AxisFault:无法加载密码回调类:org.wso2.samples.pwcb .PWCBHandler
    • 它说“无法加载密码回调类” 请确保您已将 jar 文件复制到正确的目录并重新启动服务器。另外,请确保类名正确..
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2016-09-14
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多