我已使用本教程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;
}
感谢您的任何提示。
答案 0 :(得分:0)
我认为payloadFactory可以完全按照你要做的去做。它会将soap body设置为您指定的内容。有关此转换介体的文档位于:https://docs.wso2.org/display/ESB481/PayloadFactory+Mediator
您甚至可以利用机会在soap响应中提供有用的信息,例如令牌请求网址和正确的oAuth2.0请求语法。