问题描述
我必须开发一个过滤器来读取请求的状态代码,并基于此代码(如果代码为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 (将#修改为@)