WSO2 ESB OAuth2处理程序,如何处理大型Post的无效令牌。

时间:2014-06-13 11:15:26

标签: oauth-2.0 wso2 wso2esb

我已使用本教程https://docs.wso2.org/display/ESB481/Securing+APIs#SecuringAPIs-GettingtheOAuthtoken

实现了OAuth2处理程序

如果使用无效令牌,我无法在将未经授权的回复发送回客户端之前清除正文。我已经尝试在发送消息之前清除Soap Body,但仍将原始的Post数据发送回客户端。 HTTP状态代码更改为401.

在发送响应之前,有没有办法在Oauth2处理程序中清空soap body?

在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;
 }

感谢您的任何提示。

1 个答案:

答案 0 :(得分:0)

我认为payloadFactory可以完全按照你要做的去做。它会将soap body设置为您指定的内容。有关此转换介体的文档位于:https://docs.wso2.org/display/ESB481/PayloadFactory+Mediator

您甚至可以利用机会在soap响应中提供有用的信息,例如令牌请求网址和正确的oAuth2.0请求语法。