Java doFilter方法后重定向

Java doFilter方法后重定向,java,jakarta-ee,filter,servlet-filters,hybris,Java,Jakarta Ee,Filter,Servlet Filters,Hybris,我需要做一个过滤器,它应该检查每个请求。如果响应代码是404,那么我需要将请求重定向到另一个页面。我认为sendRedirect方法需要在doFilter方法之上,但我不知道该怎么做。有什么建议吗?我把我的代码放在下面 public class ArbRedirectHttpTypeFilter extends GenericFilterBean { private static final Logger LOG = Logger.getLogger(ArbRedirectHttpTypeFi

我需要做一个过滤器,它应该检查每个请求。如果响应代码是404,那么我需要将请求重定向到另一个页面。我认为sendRedirect方法需要在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, servletResponse);

    int status = response.getStatus();

    if( servletRequest instanceof HttpServletRequest){
        String url = ((HttpServletRequest) servletRequest).getRequestURL().toString();
        String query = ((HttpServletRequest) servletRequest).getQueryString();
        if(query == null){
            LOG.info(url);
        }else {
            LOG.info(url + "?" + query);
        }
    }

    if(status == 404){
        ((HttpServletResponseWrapper) servletResponse).sendRedirect("www.google.ro");
    }

    LOG.info("============== RESPONSE CODE =============== " + status);

}

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() {
        try {
            ServletResponse object = super.getResponse();
            Method method3 = object.getClass().getMethod("getStatus");
            int httpStatus = (Integer) method3.invoke(object, new Object[]{});
            return httpStatus;

        } catch (Exception e) {
            e.printStackTrace();
            return HttpServletResponse.SC_ACCEPTED;
        }
    }
}
}

你面临的问题是什么?您的代码当前是否有错误?