Filter过滤器——一定要用重定向
今天使用Fliter过滤器校验登录,功能是:登录后点击注销,返回到登录界面,点击返回,不能返回到之前的界面,返回到指定的界面提醒用户进行登录。在最开始,我的登录和注销使用的是
req.getRequestDispatcher("sys/success.jsp").forward(req,resp);
造成的问题是,Filter过滤器只过滤一次,单机返回时,他会自动提交之前表单提交过的内容,会报错空指针(因为注销时session对象已经被remove掉了),查了很久最后发现要用
resp.sendRedirect(req.getContextPath() +"/sys/success.jsp");
进行重定向(req.getContextPath() 根据自己情况,我的不加项目名称定向不过去。)
重定向之后点击返回,页面不会二次提交界面中的表单内容,就不会报错空指针,这时候过滤器发挥效果,将用户名为空时,重定向到新的界面提醒用户进行登录。
再提一句,必须把过滤器中的servletRequest和servletResponse转换成HttpServletRequest才能获取到session的值,也必须用它才能进行重定向。