gpt4 book ai didi

java - 如何从 Servlet 过滤器中的 ServletResponse 中获取 HTTP 状态代码?

转载 作者:IT老高 更新时间:2023-10-28 20:20:52 26 4
gpt4 key购买 nike

我正在尝试报告从我的 web 应用返回的每个 HTTP 状态代码。但是,状态代码似乎无法通过 ServletResponse 访问,或者即使我将其转换为 HttpServletResponse。有没有办法在 ServletFilter 中访问这个值?

最佳答案

首先,您需要将状态代码保存在可访问的位置。最好将响应与您的实现一起包装并保留:

public class StatusExposingServletResponse extends HttpServletResponseWrapper {

private int httpStatus;

public StatusExposingServletResponse(HttpServletResponse response) {
super(response);
}

@Override
public void sendError(int sc) throws IOException {
httpStatus = sc;
super.sendError(sc);
}

@Override
public void sendError(int sc, String msg) throws IOException {
httpStatus = sc;
super.sendError(sc, msg);
}


@Override
public void setStatus(int sc) {
httpStatus = sc;
super.setStatus(sc);
}

public int getStatus() {
return httpStatus;
}

}

为了使用这个包装器,你需要添加一个 servlet 过滤器,如果你可以做你的报告:

public class StatusReportingFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
StatusExposingServletResponse response = new StatusExposingServletResponse((HttpServletResponse)res);
chain.doFilter(req, response);
int status = response.getStatus();
// report
}

public void init(FilterConfig config) throws ServletException {
//empty
}

public void destroy() {
// empty
}

}

关于java - 如何从 Servlet 过滤器中的 ServletResponse 中获取 HTTP 状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1302072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com