登录校验-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应用中,配置多个过滤器,就形成一个过滤器链
相关推荐
前端 贾公子几秒前
Monorepo + vite 怎么热更新
前端
然我37 分钟前
不用 Redux 也能全局状态管理?看我用 useReducer+Context 搞个 Todo 应用
前端·javascript·react.js
前端小巷子41 分钟前
Web 实时通信:从短轮询到 WebSocket
前端·javascript·面试
神仙别闹1 小时前
基于C#+SQL Server实现(Web)学生选课管理系统
前端·数据库·c#
web前端神器1 小时前
指定阿里镜像原理
前端
枷锁—sha1 小时前
【DVWA系列】——CSRF——Medium详细教程
android·服务器·前端·web安全·网络安全·csrf
枷锁—sha1 小时前
跨站请求伪造漏洞(CSRF)详解
运维·服务器·前端·web安全·网络安全·csrf
群联云防护小杜1 小时前
深度隐匿源IP:高防+群联AI云防护防绕过实战
运维·服务器·前端·网络·人工智能·网络协议·tcp/ip
汉得数字平台2 小时前
【鲲苍提效】全面洞察用户体验,助力打造高性能前端应用
前端·前端监控
花海如潮淹2 小时前
前端性能追踪工具:用户体验的毫秒战争
前端·笔记·ux