wso2 API 经理自定义验证 API 请求输入字段

wso2 API Manager custom validations for API request input fields

是否有任何示例代码可以帮助满足我的以下要求。 我正在 WSO2 API 管理器中发布 Rest APIs,我想为每个 API 拦截我自己的 API 输入字段验证,例如输入参数格式和值等。如果验证成功然后 API 管理器应该允许请求调用后端,否则拒绝带有错误消息的请求。

我浏览了一些文档,我知道我们可以通过添加中介扩展和自定义处理程序来实现这一点,但是我找不到任何示例代码。

https://docs.wso2.com/display/AM140/Adding+a+Mediation+Extension

如果我们正在编写自定义处理程序,我们是否应该为每个 API 编写它并在 API Synapsis 文件中进行配置更改? 我想要一个将为所有 API 调用的处理程序,并且处理程序将执行适用于该特定 API 的相应方法。

您可以拥有一个自定义处理程序,供所有 API 使用。您可以使用最新版本的API Manager which is 1.9.1

您可以通过编写自己的身份验证处理程序 class 来扩展 API 管理器以支持任何自定义身份验证机制。此自定义处理程序必须扩展 org.apache.synapse.rest.AbstractHandler class 并实现 handleRequest()handleResponse() 方法。

您可以找到示例实现 here. For more details, please have a look on Writing Custom Handlers

如果您需要在处理程序中访问消息正文,那么您可以使用以下代码块并访问消息正文。

SOAPEnvelope env = messageContext.getEnvelope();
 if (env != null) {
        SOAPBody soapbody = env.getBody();
 }

此外,如果您需要构建消息,那么您也可以这样做。

将以下依赖项添加到您的处理程序实现项目

   <dependency>
       <groupId>org.apache.synapse</groupId>
       <artifactId>synapse-nhttp-transport</artifactId>
   </dependency>

然后如下导入RelayUtils到handler

import org.apache.synapse.transport.passthru.util.RelayUtils;

然后在处理消息体之前构建消息如下(需要时添加try catch块)。

RelayUtils.buildMessage(((Axis2MessageContext)messageContext).getAxis2MessageContext());

然后您将能够按如下方式访问邮件正文。

<soapenv:Body><test>sanjeewa</test></soapenv:Body>