目录
前言
过滤器(Filter)
快速入门
步骤
详解
登录校验-Filter
具体代码
运行思路
小结
前言
- 在前面的文章中,我们已经实现了对于用户登陆成功后,生成并下发令牌返回至前端等功能接口的实现,JWT令牌就是用户成功登录后的凭证,接下来我们实现如何统一校验JWT令牌,涉及的技术主要有两种过滤器Filter和拦截器Interceptor。如果不适用Filter或者Interceptor则需要在后端代码中的每一个请求控制器类中进行JWT令牌的校验操作,工作量繁琐且单一。
过滤器(Filter)
- 概念:Filter过滤器,时JavaWeb三大组件(Servlet、Filter、Listener)之一
- 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能
- 过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理
快速入门
步骤
- 第一Filter:定义一个类,实现Filter接口(),并重写其中的所有方法
- 配置Filter:Filter类上加上@WebFilter注解,配置拦截资源的路径。启动类加上@ServletComponentScan开启Servlet组件支持。
详解
登录校验-Filter
具体代码
Filter类
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("拦截到请求");// todo 放行请求,让其访问对应的资源 filterChain.doFilter(servletRequest, servletResponse);}@Override // todo 销毁方法,服务器关闭时调用,只调用一次public void destroy() {Filter.super.destroy();System.out.println("destroy销毁方法执行了");}
}
启动类
package com.example.tlias;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;// Generated by https://start.springboot.io
// 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn@ServletComponentScan // todo 使当前项目于支持Servlet项目,Filter组件属于Servlet
@SpringBootApplication
public class TliasApplication {public static void main(String[] args) {SpringApplication.run(TliasApplication.class, args);}}
运行思路
- 在创建的Filter类中实现Servlet中的组件Filter,从而实现过滤器的功能,同时设置要拦截的请求类型之后,需要在SpringBoot项目的启动类中添加@ServletComponentScan用于扫描和注册Servlet、Filter和Listener组件,而在Filter类中的注解@WebFilter将创建的Filter类注册为Filter组件。当发起的请求需要被Filter类拦截时,Filter类就会被调用。
小结
- Filter快速入门
- 定义:实现Filter接口
- 配置:@WebFilter、@ServletComponentScan