是否有任何示例代码可以帮助我满足以下要求。 我正在WSO2 API管理器中发布Rest API,我想拦截我自己的API输入字段验证,如输入参数格式和值等。如果验证成功,那么API管理器应该允许请求调用后端,否则拒绝带有错误消息的请求。
我已经浏览了一些文档,我知道我们可以通过添加中介扩展和自定义处理程序来实现这一点,但是我找不到任何示例代码。
https://docs.wso2.com/display/AM140/Adding+a+Mediation+Extension
如果我们正在编写自定义处理程序,是否应该为每个API编写它并在API Synapsis文件中进行配置更改? 我想有一个将为所有API调用的处理程序,处理程序将执行适用于该特定API的相应方法。
答案 0 :(得分:0)
您可以拥有将由所有API使用的单个自定义处理程序。您可以使用最新版本的API Manager which is 1.9.1
您可以通过编写自己的身份验证处理程序类来扩展API Manager以支持任何自定义身份验证机制。此自定义处理程序必须扩展?
类并实现org.apache.synapse.rest.AbstractHandler
和handleRequest()
方法。
您可以找到示例实现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>