HTTP,getStatus并重定向页面 Servlet过滤器代码

问题描述

我必须开发一个过滤器来读取请求的状态代码,并基于此代码(如果代码为404),则需要将页面重定向到其他位置。问题是,要找到状态代码,我需要将代码放在doFilter方法之后,如果我想进行重定向,则需要将方法放在doFilter方法上方。你们能给我一些建议吗?我让下面的代码

public class ArbRedirectHttpTypeFilter extends GenericFilterBean {

private static final Logger LOG = Logger.getLogger(ArbRedirectHttpTypeFilter.class.getName());

@Override      
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) throws IOException,servletexception {

    StatusExposingServletResponse response = new StatusExposingServletResponse((HttpServletResponseWrapper) servletResponse);

    filterChain.doFilter(servletRequest,response);

    LOG.info("============== RESPONSE CODE =============== " + response.getStatus());

    if (response.getStatus() == 404) {
        response.resetBuffer();
        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
        response.sendRedirect("www.google.ro");
        response.flushBuffer();
}

public static 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;
    }
}
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)