登录校验-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应用中,配置多个过滤器,就形成一个过滤器链
相关推荐
_AaronWong18 分钟前
Electron 实现仿豆包划词取词功能:从 AI 生成到落地踩坑记
前端·javascript·vue.js
cxxcode19 分钟前
I/O 多路复用:从浏览器到 Linux 内核
前端
用户54330814419427 分钟前
AI 时代,前端逆向的门槛已经低到离谱 — 以 Upwork 为例
前端
JarvanMo31 分钟前
Flutter 版本的 material_ui 已经上架 pub.dev 啦!快来抢先体验吧。
前端
恋猫de小郭1 小时前
AI 可以让 WIFI 实现监控室内人体位置和姿态,无需摄像头?
前端·人工智能·ai编程
哀木1 小时前
给自己整一个 claude code,解锁编程新姿势
前端
程序员鱼皮1 小时前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github
UrbanJazzerati1 小时前
Vue3 父子组件通信完全指南
前端·面试
是一碗螺丝粉1 小时前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain
wuhen_n1 小时前
双端 Diff 算法详解
前端·javascript·vue.js