对资源的请求、响应之前,我们会先拦截下来,进行一些操作。
请求时首先会经过过滤器,我们将一些重复的操作写在过滤器中,执行到过滤器时,只需要执行一次 过滤器,就可以了。不必在各种资源中,再写一边。
Filter快速入门
执行流程
使用细节
过滤器链
操作: 过滤器1进行拦截,然后再放行
FilterDemo1、FilterDemo2
案例
对于登录后的页面,如果我直接输入网址就进去的话,是需要进行判断有没有登录的,如果我对每个页面都写判断的话,太麻烦了。
此时我们只需要通过请求网页的时候帮我们拦截掉没有登录的就行,只需要写一条拦截语句即可。
以前我们是将用户信息保存在session中的
@WebFilter("/*")对所有的页面进行拦截
public void doFilter(...){
//获取请求
HttpServletRequest req = (HttpServletRequest)request;
//判断session中是否有user,因为我们真的登录后会将登录的信息保存在session中
HttpSession session = req.getSession();
//通过user关键字,拿到value,value中保存了用户名和密码
Object user = session.getAttribute("user");
if(user!=null){
//说明登陆过了,直接放行
chain.doFilter(request,response)
}else {
//没有登录,提示信息并跳转登录页面
req.setAttribute("login_msg","您尚未登录")
req.getRequestDispatch("/login.jsp").forward(req,response)
}
}
但是上面的操作,如果我没有登陆过的话,拦截的时候甚至会把我的一些css以及其他页面拦截掉,这个时候我需要手工指定
Listener
用得少了