有没有办法从WSO2自定义处理程序设置响应代码/文本?

时间:2016-01-12 15:03:35

标签: wso2 http-response-codes

我根据用户指南中的说明为WSO2编写了一个自定义身份验证处理程序。

一般情况下,处理程序工作正常,即当给出正确的凭据时,它正确地运行API,并且当给出错误的凭据时,它拒绝API,但在这种情况下 - 状态代码202,带有空响应文本返回到& #34;卷曲"

有没有办法控制返回的响应代码或为这些情况构建合理的响应文本?我更希望返回"禁止"的响应代码或者是一个文字说'#34;给出错误的凭证"每当自定义处理程序决定拒绝API调用时。

我看到HandleRequest(MessageContext messageContext)返回布尔值,因此不确定如何发回所需的响应代码和文本。

1 个答案:

答案 0 :(得分:1)

以下是为捕获请求而编写的示例代码,以及"授权"标头不可用,请将请求作为响应发送回客户端。

你可以看到我添加了" HTTP_SC"标头值为401.

使用messageContext.setProperty("RESPONSE", "true");,我们可以将此作为回复发送回客户端。

 public boolean handleRequest(MessageContext messageContext) {
        org.apache.axis2.context.MessageContext axis2MessageContext = ((Axis2MessageContext) messageContext)
                .getAxis2MessageContext();
        Object headers = axis2MessageContext
                .getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);

        try {
            if (headers != null && headers instanceof Map) {
                Map headersMap = (Map) headers;
                if (headersMap.get("Authorization") == null) {
                    headersMap.clear();
                    axis2MessageContext.setProperty("HTTP_SC", "401");
                    headersMap.put("WWW-Authenticate",
                            "Basic realm=\"WSO2 ESB\"");
                    axis2MessageContext.setProperty("NO_ENTITY_BODY",
                            new Boolean("true"));
                    messageContext.setProperty("RESPONSE", "true");
                    messageContext.setTo(null);
                    Axis2Sender.sendBack(messageContext);
                    return false;

                } else {

                    return true;
                }
            }
            return false;

        } catch (Exception e) {
            log.error("Unable to execute the authentication process : ", e);
            return false;
        }

    }

希望这会对你有所帮助。 欢呼声。