Java doFilter方法后重定向
我需要做一个过滤器,它应该检查每个请求。如果响应代码是404,那么我需要将请求重定向到另一个页面。我认为sendRedirect方法需要在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
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;
}
}
}
}
你面临的问题是什么?您的代码当前是否有错误?