apache / apisix-java-plugin-runner

APISIX Plugin Runner in Java
https://apisix.apache.org/
Apache License 2.0
126 stars 95 forks source link

request help: 插件获取ext-plugin-post-resp获取请求响应码为0 #307

Open cb123456-user opened 3 months ago

cb123456-user commented 3 months ago

Issue description

只配置了自定义插件apisix-java-plugin-runner,使用request.getVars("status")获取到的响应码为0,期望获取的是200,应该怎么获取正确的响应码?

Environment

APISIX version:3.2 apisix-java-plugin-runner version:0.4.0

plugin config

"plugins": { "ext-plugin-post-resp": { "allow_degradation": true, "conf": [{ "name": "ReceiveResponseFilter", "value": "{\"appId\":\"1000\",\"validate_header\":\"cookie\",\"rejected_code\":\"403\"}" }] } }

插件代码

@Slf4j @Component public class ReceiveResponseFilter implements PluginFilter {

@Override
public String name() {
    return "ReceiveResponseFilter";
}

/**
 * @param request
 * @param response
 * @param chain
 */
@Override
public void postFilter(PostRequest request, PostResponse response, PluginFilterChain chain) {
    String configStr = request.getConfig(this);
    Gson gson = new Gson();
    Map<String, Object> conf = new HashMap<>();
    conf = gson.fromJson(configStr, conf.getClass());

    try {
        String appId = String.valueOf(conf.get("appId"));
        log.info("ReceiveResponseFilter appId {}", appId);

        byte[] bodyBytes = request.getBody().getBytes(StandardCharsets.ISO_8859_1);
        String responseBody = new String(bodyBytes, StandardCharsets.UTF_8);
        log.info("responseBody----- {}", responseBody);

        String requestVarsHost = request.getVars("host");
        String uri = request.getVars("uri");
        String request_method = request.getVars("request_method");
        String remote_addr = request.getVars("remote_addr");
        String http_cookie = request.getVars("http_cookie");
        String status = request.getVars("status");
        log.info("requestVars host {}", requestVarsHost);
        log.info("requestVars uri {}", uri);
        log.info("requestVars request_method {}", request_method);
        log.info("requestVars remote_addr {}", remote_addr);
        log.info("requestVars http_cookie {}", http_cookie);
        log.info("requestVars status {}", status);

        Integer upstreamStatusCode = request.getUpstreamStatusCode();
        log.info("upstreamStatusCode {}", upstreamStatusCode);

    } catch (Exception e) {
        log.info("ReceiveResponseFilter error {}", ExceptionUtil.stacktraceToString(e));
    }
    chain.postFilter(request, response);
}

@Override
public List<String> requiredVars() {
    List<String> requiredVars = new ArrayList<>();
    requiredVars.add("host");
    requiredVars.add("uri");
    requiredVars.add("request_method");
    requiredVars.add("remote_addr");
    requiredVars.add("http_cookie");
    requiredVars.add("status");

    return requiredVars;
}

@Override
public Boolean requiredRespBody() {
    return true;
}

}

正常请求结果

requestVars status 0 upstreamStatusCode 13

失败请求结果

requestVars status 0 upstreamStatusCode 13

预期结果

正常获取请求返回的成功/失败响应码