用于API请求输入字段的wso2 API Manager自定义验证

时间:2015-10-31 05:55:00

标签: json validation request wso2

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

您可以找到示例实现here。有关详细信息,请查看Writing Custom Handlers

答案 1 :(得分:0)

如果您需要访问处理程序中的邮件正文,则可以使用以下代码块并访问邮件正文。

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

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

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

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

然后将RelayUtils导入处理程序,如下所示。

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

然后在进程消息体之前构建消息,如下所示(在需要时添加try catch块)。

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

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

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