项目场景:
springboot 项目,自定义Filter过滤器,拦截请求处理业务。
问题描述:
启动项目访问接口时,在自定义过滤器中 调用resp.sendRedirect()报错了。
原因分析:
报错翻译:在response已经提交后,不能在调 sendRedirect() 方法了。
其实就是说:执行了 chain.doFilter(req, resp);后,不能在使用resp对象的 sendRedirect()
所以查看代码发现:
...
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
....
boolean flag = getStatus();//判断依据
if (flag) {
....
chain.doFilter(request, response);
}
httpResponse.sendRedirect(“xxxx”);
...
如果判断的flag是true,则会执行chain.doFilter(request, response),同时执行完后,还会执行httpResponse.sendRedirect(“xxxx”)
解决方案:
在chain.doFilter(request, response)后,添加 return结束当前方法。
...
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
....
boolean flag = getStatus();//判断依据
if (flag) {
....
chain.doFilter(request, response);
return;
}
httpResponse.sendRedirect(“xxxx”);
...