登录校验-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应用中,配置多个过滤器,就形成一个过滤器链
相关推荐
平头哥~6 分钟前
Day 15 | 不改一行 HTML,给页面加上引号、角标和标签
前端·javascript·css·html·css3·学习资料
风骏时光牛马11 分钟前
后端系统性能监控与异常告警管理
前端
Fluxart.ai1 小时前
GPT Image 2 国内怎么用?在 Flux Art 完成图片生成与编辑
前端·javascript·gpt
tanzongbiao1 小时前
Dorado7文件上传 解决HttpServletResponse返回值中文乱码的问题
java·服务器·前端
郑州光合科技余经理5 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
平头哥~9 小时前
Day 07 _ 那条 1px 的线,为什么在手机上忽粗忽细
前端·css·样式·学习资料
小江的记录本9 小时前
【CSS】CSS 动画:transition、animation、transform、CSS3 新特性(附《思维导图》)
前端·css·安全·spring·前端框架·css3·动画
circuitsosk9 小时前
任务规划器的三种范式对比:ReAct、Plan-and-Execute 与 Tree-of-Thought 在真实业务中的取舍
前端·javascript·python·react.js·llm·ai agent
hzxpaipai11 小时前
企业官网技术架构拆解:前端、后台、数据库、服务器如何协同
前端·数据库·架构