登录校验-Filter-详解

目录

执行流程

拦截路径

过滤器链 

小结


执行流程

  • 过滤器Filter拦截到请求之后,首先执行方放行之前的逻辑,然后执行放行操作(doFilter),然后会访问对应的Web资源(对应的Controller类),Controller类处理完请求后,然后执行放行之后的逻辑,最后将响应结果返回给前端。

拦截路径

  • Filter可以根据需求,匹配不同的拦截资源路径
    • 拦截路径urlPatterns值

      含义

      拦截具体路径/login只有访问/login路径时,才会被拦截
      目录拦截/emps/*访问/emps下的所有资源,都会被拦截
      拦截所有/*访问所有资源,都会被拦截

过滤器链 

  • 介绍:一个Web应用中,可以配置多个过滤器,这多个过滤器就形成了一个过滤器链
    • 在所有过滤器放行之后才会访问Web资源(Controller类),而过滤器放行之后的逻辑的执行顺序是从后到前的。最后给前端响应数据
  • 具体举例如下:
    • 过滤器Filter顺序:
    • 具体代码如下:

      •  AFilter

      • package com.example.tlias.Filter;
        
        import jakarta.servlet.*;
        import jakarta.servlet.annotation.WebFilter;
        
        import java.io.IOException;
        
        @WebFilter(urlPatterns = "/*")
        public class AFilter implements Filter {
            @Override
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                System.out.println("AFilter放行之前的逻辑");
                // todo 放行请求,让其访问对应的资源
                filterChain.doFilter(servletRequest, servletResponse);
                System.out.println("AFilter放行之后的逻辑");
            }
        }
        
      • JWTFIlter

      • package com.example.tlias.Filter;
        
        
        import jakarta.servlet.*;
        import jakarta.servlet.annotation.WebFilter;
        
        import java.io.IOException;
        
        @WebFilter("/*") // todo 设置当前过滤器要拦截的请求
        public class JWTFilter implements Filter {
            @Override// todo  初始化方法,Web服务器启动时,创建Filter时调用,只调用一次
            public void init(FilterConfig filterConfig) throws ServletException {
                Filter.super.init(filterConfig);
                System.out.println("init初始化方法执行了");
            }
        
            @Override  // todo 拦截到请求时就会调用该方法,可调用多次
            public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
                System.out.println("JWTFilter放行之前的逻辑");
                // todo 放行请求,让其访问对应的资源
                filterChain.doFilter(servletRequest, servletResponse);
                System.out.println("JWTFilter放行之后的逻辑");
        
            }
        
            @Override // todo 销毁方法,服务器关闭时调用,只调用一次
            public void destroy() {
                Filter.super.destroy();
                System.out.println("destroy销毁方法执行了");
            }
        }
        
    • 测试运行结果

      • 在所有的过滤器放行前的逻辑执行完之后,才会将请求交给Web资源进行处理
         

小结

  • 执行流程
    • 请求-->放行前的流程-->放行-->资源-->放行后的逻辑
  • 拦截路径
    • /login
    • /depts/*
    • /*
  • 过滤器链
    • 一个Web应用中,配置多个过滤器,就形成一个过滤器链
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值