在权限管理模块,对后台用户做粗粒度的登陆验证时,过滤器中抛出了如下的异常: java.lang.IllegalStateException: Cannot call sendError() after the response has been committedpublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; Employee emp = WebUtil.getEmployee(req); //未登录, 或者 session 已经过期 if (!req.getRequestURI().equalsIgnoreCase(req.getContextPath() + this.ignoreURI) && !req.getRequestURI().equalsIgnoreCase(req.getContextPath() + "/control/logout")) { //避免登陆页面也被拦截 if (null == emp) { res.sendRedirect(ActionContext.getActionContext().getRequest().getContextPath() + "/control/login"); //重定向到登陆页面 return; } } chain.doFilter(request, response); } 注意看红色的 return; 这里是因为 response.sendRedirect(..) 之后 继续 chain.doFilter(..) 导致
|
|
来自: CevenCheng > 《错误笔记&&问题手册》