1. Filter简介

通过Filter技术,对各种资源:例如API, JSP,Servlet,静态图片文件或静态HTML文件进行拦截,从而实现一些特殊功能。如实现token校验,URL级别的权限控制、过滤敏感词汇、额外记录日志、压缩响应信息等一些高级功能。

'

1.1. SpringBoot 中Filter的作用

  • 在request被处理前,预处理,或者修改request。比如,所有的api都要做鉴权处理,通过后才会被业务逻辑处理,这部分逻辑就可以卸载Filter中。
  • 修改一个response,比如附加一些额外的信息再返回给Client。
  • 可以定义多个Filter,并指定执行的顺序。

1.2. @WebFilter

Servlet3+ 额外增加的WebFilter注释, 方便处理Web应用中的场景。

2. 基于@WebFilter的实现

环境:

  • Java 1.8.0_05
  • Spring Boot: 2.4.1
  • IDE: Intellj IDEA 2020.3

2.1. SpringbootApplication方法上加上启动扫描

@ServletComponentScan
@SpringBootApplication
public class TodoApiApplication {
// ... ...
}

2.2. 新建Filter

@WebFilter(filterName = "AuthFilter", urlPatterns = {"/todo-api/v1/tasks/*", "/todo-api/v1/order/*"})
@Order(1)
public class AuthFilter implements Filter { @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; // 预处理 Request
// "Request - "+ request.getMethod() + ":"+ request.getRequestURI()
// ... ... // 最后,让其他servlet或者Filter继续处理
filterChain.doFilter(servletRequest,servletResponse);
}
}

2.3. 关于WebFilter

  1. Order(x) 里面的x数值越小优先级越高
  2. 根据需要,可以重载init,destroy方法
    @Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器创建");
} @Override
public void destroy() {
System.out.println("过滤器销毁");
}

3. 总结

Filter (@WebFilter) 用于拦截Web请求,进行预处理,或者修改Response再返回给客户端。

---------- END ----------

SpringBoot入门到精通系列教程 - Filter/WebFilter的更多相关文章

  1. 办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时)

    办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时) 乔布斯的成功离不开美轮美奂的幻灯片效果,一个成功的商务人士.部门经理也少不了各种各样的PPT幻灯片.绿色资源网给你提供了 ...

  2. SpringBoot系列之从入门到精通系列教程

    对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 Spring框架:作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多, ...

  3. Part 2:模型与后台管理admin站点--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  4. Part 3:视图和模板--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  5. Part 7:自定义admin站点--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  6. 关系类型字段 -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  7. 多对多中间表详解 -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  8. 模型的继承 -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

  9. 查询操作 -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...

随机推荐

  1. C# Winform TCP发消息

    服务端: 代码: using System; using System.Collections.Generic; using System.IO; using System.Net; using Sy ...

  2. Bootstrap(修改中)

    表格 斑马表格 <table class="table-striped"> </table> 鼠标经过表格的hover效果 <table class= ...

  3. AndroidStudio中获得的VersionCode一直为1和VersionName一直为1.0

    因为AndroidStudio把versionCode和versionName的维护放到了build.gradle中.

  4. SpringBoot集成FastDFS依赖实现文件上传

    前言 对FastDFS文件系统安装后的使用. FastDFS的安装请参考这篇:Docker中搭建FastDFS文件系统(多图) 本文环境:IDEA + JDK1.8 + Maven 本文项目代码:ht ...

  5. AOV图与拓扑排序&AOE图与关键路径

    AOV网:所有的工程或者某种流程可以分为若干个小的工程或阶段,这些小的工程或阶段就称为活动.若以图中的顶点来表示活动,有向边表示活动之间的优先关系,则这样活动在顶点上的有向图称为AOV网. 拓扑排序算 ...

  6. 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...

  7. PyQt(Python+Qt)学习随笔:QTableWidgetItem项数据的data和setData访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget部件中的QTableWidgetItem项数据可以通过项的data( int ...

  8. python 保存list,map方法

    1. 保存list import numpy as np a = [1,2,3,4,5] np.save("number.npy", a) k = np.load("nu ...

  9. 3、tensorflow变量运算,数学运算

    import tensorflow as tf import numpy as np a = tf.range(1,7) a = tf.reshape(a,[2,3]) b = tf.constant ...

  10. js原生方法map实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...