有没有办法从 WSO2 自定义处理程序设置响应 code/text?
is there a way to set response code/text from WSO2 custom handler?
我根据用户指南中的说明为 WSO2 编写了自定义身份验证处理程序。
一般来说,处理程序工作正常,即当提供正确的凭据时它会正确运行 API,当提供错误的凭据时它会拒绝 API,但在这种情况下 - 状态代码202 个空响应文本返回到 "curl"。
有没有办法控制返回的响应代码或为这种情况构建合理的响应文本?每当自定义处理程序决定拒绝 API 调用时,我更愿意返回 "forbidden" 的响应代码或说 "wrong credentials given" 的文本。
我看到 HandleRequest(MessageContext messageContext) returns 布尔值,所以不确定如何发回所需的响应代码和文本。
以下是为捕获请求而编写的示例代码,如果 "Authorization" header 不可用,则将请求作为响应发送回客户端。
你可以看到我已经添加了值为 401 的 "HTTP_SC" header。
使用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;
}
}
希望对您有所帮助。
干杯。
我根据用户指南中的说明为 WSO2 编写了自定义身份验证处理程序。
一般来说,处理程序工作正常,即当提供正确的凭据时它会正确运行 API,当提供错误的凭据时它会拒绝 API,但在这种情况下 - 状态代码202 个空响应文本返回到 "curl"。
有没有办法控制返回的响应代码或为这种情况构建合理的响应文本?每当自定义处理程序决定拒绝 API 调用时,我更愿意返回 "forbidden" 的响应代码或说 "wrong credentials given" 的文本。
我看到 HandleRequest(MessageContext messageContext) returns 布尔值,所以不确定如何发回所需的响应代码和文本。
以下是为捕获请求而编写的示例代码,如果 "Authorization" header 不可用,则将请求作为响应发送回客户端。
你可以看到我已经添加了值为 401 的 "HTTP_SC" header。
使用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;
}
}
希望对您有所帮助。 干杯。