登录校验-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应用中,配置多个过滤器,就形成一个过滤器链
相关推荐
Championship.23.241 小时前
Open Source Pipeline Skill深度解析:自动化开源贡献全流程
前端·javascript·html
Bigger1 小时前
🧠 前端岗位的"结构性调整":现象背后的冷思考
前端·程序员·ai编程
薯老板1 小时前
vue组件之间的通信
前端·vue.js
迪菲赫尔曼1 小时前
从 0 到 1 打造工业级推理控制台:UltraConsole(Ultralytics + FastAPI + React)开源啦!
前端·yolo·react.js·计算机视觉·开源·fastapi
万邦科技Lafite1 小时前
京东开放API接口:item_get返回参数指南
java·前端·javascript·api·电商开放平台
梦想CAD控件1 小时前
网页CAD协同设计平台-生产级在线实时协同CAD引擎
前端·javascript·架构
Highcharts.js1 小时前
React 开发实战:如何使用 useEffect 为 Highcharts 注入实时数据
前端·javascript·react.js·开发实战·实时数据·highcharts·轮询数据
陆枫Larry1 小时前
Vue Slot 到底在解决什么问题?
前端
梦想很大很大1 小时前
让 AI 成为“报表配置员”:BI 低代码平台的 Schema 实践路径
前端·人工智能·低代码
用户059540174461 小时前
asyncio 踩坑实录:这个问题坑了我3小时,差点让线上服务崩掉
前端·css