Filter-Listener

80 阅读1分钟

图片.png

对资源的请求、响应之前,我们会先拦截下来,进行一些操作。

请求时首先会经过过滤器,我们将一些重复的操作写在过滤器中,执行到过滤器时,只需要执行一次 过滤器,就可以了。不必在各种资源中,再写一边。

Filter快速入门

图片.png

图片.png

执行流程

图片.png

使用细节

图片.png

过滤器链

图片.png

操作: 过滤器1进行拦截,然后再放行

图片.png

图片.png FilterDemo1、FilterDemo2

案例

对于登录后的页面,如果我直接输入网址就进去的话,是需要进行判断有没有登录的,如果我对每个页面都写判断的话,太麻烦了。
此时我们只需要通过请求网页的时候帮我们拦截掉没有登录的就行,只需要写一条拦截语句即可。
以前我们是将用户信息保存在session中的

图片.png

图片.png

@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以及其他页面拦截掉,这个时候我需要手工指定

图片.png

Listener

用得少了

图片.png

图片.png