在chain.doFilter(request,response)后若有重定向或转发语句,执行顺序是:
1.所要访问的资源不是转发的目标资源:
chain.doFilter(request,response)–>下一个过滤器(如果有)–>执行完整个 过滤器链–>执行重定向或转发语句–>最后再访问你所要访问的资源
2..所要访问的资源是转发的目标资源:
chain.doFilter(request,response)–>下一个过滤器(如果有)–>执行完整个 过滤器链–>最后再访问你所要访问的资源
而在1的情况里,重定向语句会与访问的资源产生冲突而抛出异常
代码片段
//获取session域对象
HttpSession session = request.getSession(false);
if(session!=null) {
//若session对象不为空
if(session.getAttribute("userInfo")!=null) {
//若userInfo不为空
//说明已经登录成功,放行
arg2.doFilter(request, response);
}else {
//否则,跳转到登录页面
url="/User/login.jsp";
}
}else {
//否则,跳转到登录页面
url="/User/login.jsp";
}
request.getRequestDispatcher(url).forward(request, response);