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

有没有办法从WSO2自定义处理程序设置响应代码/文本?,wso2,http-response-codes,Wso2,Http Response Codes,根据《用户指南》中的说明,我为WSO2编写了一个自定义身份验证处理程序 一般来说,处理程序工作正常,即当提供正确的凭据时,它会正确运行API,当提供错误的凭据时,它会拒绝API,但在这种情况下,带有空响应文本的状态代码202会返回到“curl” 有没有一种方法可以控制返回的响应代码,或者为这种情况构造合理的响应文本?每当自定义处理程序决定拒绝API调用时,我更希望返回“禁止”的响应代码或一个表示“提供了错误的凭据”的文本 我看到HandlerRequest(MessageContext Mess

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

一般来说,处理程序工作正常,即当提供正确的凭据时,它会正确运行API,当提供错误的凭据时,它会拒绝API,但在这种情况下,带有空响应文本的状态代码202会返回到“curl”

有没有一种方法可以控制返回的响应代码,或者为这种情况构造合理的响应文本?每当自定义处理程序决定拒绝API调用时,我更希望返回“禁止”的响应代码或一个表示“提供了错误的凭据”的文本


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

以下是为捕获请求而编写的示例代码,如果“Authorization”标头不可用,则将请求作为响应发送回客户端

您可以看到,我添加了值为401的“HTTP_SC”头

使用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;
        }

    }
希望这对你有帮助。
干杯。

非常感谢!我怀疑您在代码中的意思是“如果(headersMap.get(“Authorization”)!=null{…}”(而不是“==”)Axis2Sender.sendBack(messageContext);将消息发送回客户端。:)此代码用于检查传入请求是否使用基本身份验证进行了安全保护。如果基本身份验证被禁用,请求将作为响应发送回客户端。您可以根据需要更改逻辑。无论如何,使用“Axis2Sender.sendBack(messageContext);”可以将请求发回,如果您认为这是您所期望的,请不要忘记将其作为正确的请求接受:)