登录校验-Filter-详解

目录

执行流程

拦截路径

过滤器链

小结


执行流程

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

拦截路径

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

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

过滤器链

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

    • 具体代码如下:

      • AFilter

      java 复制代码
      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

      java 复制代码
      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 分钟前
Source/Core/Matrix4.js
前端·javascript
小江的记录本2 分钟前
【MyBatis-Plus】Spring Boot + MyBatis-Plus 进行各种数据库操作(附完整 CRUD 项目代码示例)
java·前端·数据库·spring boot·后端·sql·mybatis
于慨1 小时前
Capacitor
前端
IT凝冬1 小时前
liunx 的 centos7 安装ngin
前端
赵锦川1 小时前
大屏比例缩放
前端·javascript·html
于慨2 小时前
tauri
java·服务器·前端
贼爱学习的小黄2 小时前
NC BIP参照开发
java·前端·nc
小江的记录本2 小时前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
光影少年3 小时前
如何进行前端性能优化?
前端·性能优化
Dxy12393102163 小时前
js如何把字符串转数字
开发语言·前端·javascript