wso2 esb - 在调解器返回 false 的情况下如何处理请求

标签 wso2 apache-synapse wso2-esb

我有自定义调解器,我们正在验证内部身份验证系统。如果身份验证失败,调解器返回 false。客户端接收 HTTP 状态代码 202 的响应。我想用一些 JSON 响应来覆盖它,例如 {“authError”:“身份验证失败 - TOKEN_INVALID”}。请让我知道如何处理此类情况。

ESB 版本 - 4.81。 这是我的代理配置 -

    <?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="UGCGetJSONFileList"
       transports="https,http"
       statistics="enable"
       trace="disable"
       startOnLoad="true">
   <target outSequence="WEB_OUT_Sequence">
      <inSequence>
         <log level="full" separator=","/>
         <class name="com.hc.synapse.mediator.HCAuthenticationMediator"/>
         <property name="RESPONSE" value="true" scope="axis2"/>
         <property name="uri.var.querystrings"
                   expression="substring-after(get-property('To'), '?')"
                   scope="axis2"
                   type="STRING"/>
         <log level="full" separator=","/>
         <switch source="$axis2:HTTP_METHOD">
            <case regex="GET">
               <property name="uri.var.querystrings"
                         expression="substring-after(get-property('To'), '?')"
                         scope="default"
                         type="STRING"/>
               <log level="full" separator=","/>
               <send>
                  <endpoint>
                     <http method="get"
                           uri-template="http://dalx-entsvc-d1:9660/ugc/getJSONFileList?{uri.var.querystrings}"/>
                  </endpoint>
               </send>
            </case>
            <case regex="POST">
               <log level="full" separator=","/>
               <send>
                  <endpoint>
                     <address uri="http://dalx-entsvc-d1:9660/ugc/getJSONFileList?{uri.var.querystrings};content"
                              trace="enable"
                              statistics="enable">
                        <timeout>
                           <duration>30000</duration>
                           <responseAction>discard</responseAction>
                        </timeout>
                        <suspendOnFailure>
                           <initialDuration>0</initialDuration>
                           <progressionFactor>1.0</progressionFactor>
                           <maximumDuration>0</maximumDuration>
                        </suspendOnFailure>
                     </address>
                  </endpoint>
               </send>
            </case>
            <default/>
         </switch>
      </inSequence>
      <faultSequence>
         <log level="full" separator=",">
            <property name="trace" expression="get-property('ERROR_MESSAGE')"/>
         </log>
         <payloadFactory media-type="json">
            <format>{ "authError" : "Authetication failed - TOKEN_INVALID" }</format>
            <args/>
         </payloadFactory>
         <property name="RESPONSE" value="true"/>
         <header name="To" action="remove"/>
         <send/>
      </faultSequence>
   </target>
   <description/>
</proxy>

最佳答案

  • 在类中介器中,您可以抛出 SynapseException
  • 在这种情况下,将执行 inSequence 中介停止和 failureSequence
  • 在faultSequence中,您可以使用 media-type="json"的中介器payloadFactory来构建您的json消息并将其发送到客户端 <send/>

关于wso2 esb - 在调解器返回 false 的情况下如何处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26402676/

相关文章:

rest - WSO2 突触 : setting a URL parameter

http - WSO2 序言中出现意外的 EOF

java - 如何从 WSO2 ESB Synapse 处理程序内的 REST 请求的 JSON 正文中提取数据

java - 通过 WSO2ESB 访问 NTLM 安全 WS

与 WSO2 ESB 和客户端应用程序的 SSL 握手

java - 如何在 WSO2 ESB 中运行自定义应用程序

wso2 - 使用 wso2 carbon registry 来存储 SOA 服务的配置数据

wso2 - 将新用户添加到 Wso2 CEP 到 H2 数据库中

Carbon 4.2 上的 WSO2 ESB - 部署处理程序 'Transport' 时未找到所需的阶段 'POXSecurityHandler'

WSO2 如何将 ESB 与 Identity Server 集成