2015-10-31 51 views
2

是否有任何示例代碼可以幫助我滿足以下要求。 我在WSO2 API管理器中發佈了Rest APIs,我想攔截我自己的API輸入字段驗證,如輸入參數格式和值等每個API。如果驗證成功,那麼API管理器應該允許請求調用後端,否則用錯誤信息拒絕請求。wso2 API管理器API請求輸入字段的自定義驗證

我已經去了一些文件,我明白我們可以通過添加中介擴展和自定義處理程序來實現此目的,但是我找不到任何示例代碼。

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

如果我們正在編寫自定義處理程序,我們應該把它寫爲每個API和做API聯會文件配置的變化? 我想有一個處理程序將調用所有API,處理程序將執行適用於該特定API的相應方法。

回答

0

您可以擁有一個將由所有API使用的自定義處理程序。您可以使用最新版本的API Manager which is 1.9.1

您可以通過編寫自己的身份驗證處理程序類來擴展API管理器以支持任何自定義身份驗證機制。此自定義處理程序必須擴展org.apache.synapse.rest.AbstractHandler類並實施handleRequest()handleResponse()方法。

你可以找到一個示例實現here。有關更多詳細信息,請參閱Writing Custom Handlers

+1

Thanks Abimaran !!我認爲這可以幫助我,會嘗試一下,讓知道。 – siva

+0

@Ahhimaran:我試着用上面的選項,我可以看到自定義處理程序正在調用所有的API,但是我無法獲取POST請求的JSON有效負載/輸入參數。你可以讓我知道如何使用MessageContest對象獲取輸入參數。我知道WSO2 AM會將JSON請求轉換爲xml,一旦調用實際的後端休息服務WSO2 AM,它將再次從xml轉換爲JSON。 – siva

+0

你有沒有得到任何迴應?如何發送發佈請求和驗證。 – Dileephell

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()); 

然後您將能夠訪問消息正文如下。