2014-06-13 74 views
0

我已經使用本教程實現了OAuth2處理程序https://docs.wso2.org/display/ESB481/Securing+APIs#SecuringAPIs-GettingtheOAuthtokenWSO2 ESB OAuth2處理程序,如何處理大型Post的無效標記。

如果使用無效標記,則在將未經授權的響應發送回客戶端之前,我無法清除主體。在發送消息之前,我嘗試清除肥皂身體,但仍將原始發佈數據發送回客戶端。 HTTP狀態代碼更改爲401.

在發送響應之前,是否有任何方法在Oauth2處理程序中清空肥皂主體?

在OAuth2教程中,處理程序只根據標記驗證返回true/false。如果我在處理程序返回false時執行該請求,則請求只會掛起而不會收到任何響應。它應該工作,而不是手動發送迴應內部處理程序?

這裏是我當前的代碼片段:

public boolean handleRequest(MessageContext msgCtx) { 

.... 

boolean isValid = stub.validate(dto).getValid(); 

if (!isValid) 
{ 
    log.error("is not valid token"); 

     Axis2MessageContext axis2smc = (Axis2MessageContext) msgCtx; 
     org.apache.axis2.context.MessageContext axis2MessageCtx =     axis2smc.getAxis2MessageContext(); 
     axis2MessageCtx.setProperty("HTTP_SC", "401"); 
     axis2MessageCtx.setProperty("DISABLE_CHUNKING", true); 
     axis2MessageCtx.setProperty("NO_ENTITY_BODY", new Boolean("true")); 
     msgCtx.setProperty("RESPONSE", "true"); 
     msgCtx.setTo(null); 

// Trying to flush response body with dummy tags, but this does not work 
// However it works in Custom mediator implemention. 
     try { 
      SOAPBody body = msgCtx.getEnvelope().getBody(); 
      body.setFirstChild(AXIOMUtil.stringToOM("<p></p>")); 

     } 

     catch (XMLStreamException e) { 
     log.error(e.getStackTrace()); 
     } 

     Axis2Sender.sendBack(msgCtx); 
     return false; 
    } 

     return isValid; 
} 

感謝您的任何提示。

回答

0

我認爲payloadFactory可以做你想要做的。它會將肥皂體設置爲您指定的內容。有關此轉換介體的文檔位於以下位置:https://docs.wso2.org/display/ESB481/PayloadFactory+Mediator

您甚至可以有機會在soap響應中提供有用的信息,如令牌請求url和適當的oAuth2.0請求語法。