笔记

1、深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识)
    简介:讲解SpringBoot里面Filter讲解和使用Servlet3.0配置自定义Filter实战
        
        filter简单理解:人--->检票员(filter)---> 景点

1、SpringBoot启动默认加载的Filter 
            characterEncodingFilter
            hiddenHttpMethodFilter
            httpPutFormContentFilter
            requestContextFilter
                
        2、Filter优先级

Ordered.HIGHEST_PRECEDENCE
            Ordered.LOWEST_PRECEDENCE

低位值意味着更高的优先级 Higher values are interpreted as lower priority
            自定义Filter,避免和默认的Filter优先级一样,不然会冲突

注册Filter的bean FilterRegistrationBean
            同模块里面有相关默认Filter
                web->servlet->filter

3、自定义Filter
            1)使用Servlet3.0的注解进行配置
            2)启动类里面增加 @ServletComponentScan,进行扫描
            3)新建一个Filter类,implements Filter,并实现对应的接口
            4) @WebFilter 标记一个类为filter,被spring进行扫描 
                urlPatterns:拦截规则,支持正则

6)控制chain.doFilter的方法的调用,来实现是否通过放行
               不放行,web应用resp.sendRedirect("/index.html");
                场景:权限控制、用户登录(非前端后端分离场景)等

1、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

开始

启动应用。查看启动日志

这是springboot的默认过滤器

mapping是映射。包括我们自己写的

动态加载

异常处理ControllerAdvice

Ordered就是一个接口。

里面有两个常量。Integer的最大值和最小值

里面还有个geteOrder方法就是获取它 的优先级


这里来看FilterRegistrationBean。点进去查看源码。FilterRegistrationBean这是一个注册Filter的Bean

在springboot的包下

这些是默认的Filter


随便打开一个默认的Filter

通过getOrder方法返回上面的order的优先级别

再去看他的上一级

上一级里面有个比较重要的知识点。doFilter,我们在自定义过滤器的时候会讲解doFilter

filter必须依赖Servlet容器,主要的机制是基于一个回调机制

自定义Filter

使用servlet3.0的注解配置我们的自定义Filter
3、自定义Filter
            1)使用Servlet3.0的注解进行配置
            2)启动类里面增加 @ServletComponentScan,进行扫描
            3)新建一个Filter类,implements Filter,并实现对应的接口
            4) @WebFilter 标记一个类为filter,被spring进行扫描 
                urlPatterns:拦截规则,支持正则

6)控制chain.doFilter的方法的调用,来实现是否通过放行
               不放行,web应用resp.sendRedirect("/index.html");
                场景:权限控制、用户登录(非前端后端分离场景)等

新建了一个Filter模块

实现Filter接口。

里面有是哪个方法需要去实现

init方法是容器启动的时候进行加载

doFilter:核心的处理业务的方法


xdclss等于接收的参数username那么就放行,否则直接return返回

destory在容器销毁的时候进行调用。

配置注解,加入spring进行管理

@WebFilter是spring3.0的一个注解。
urlPatterns:要拦截的url。 /*是拦截所有的请求。这里配置的是/api/*拦截api开头的下面的所有请求。

当然我们也可以拦截例如不同模块下的请求。这里前面加上admin就是拦截admin模块下的所有请求。

filterName这里暂时先用不到。这里随便写一个名称就可以了。

4) @WebFilter 标记一个类为filter,被spring进行扫描 
                urlPatterns:拦截规则,支持正则

6)控制chain.doFilter的方法的调用,来实现是否通过放行
               不放行,web应用resp.sendRedirect("/index.html");
                场景:权限控制、用户登录(非前端后端分离场景)等

启动类需要加注解@ServletComponentScan

启动测试


查看启动日志。我们自定义的Filter已经初始化了。

上面几个是默认的Filter。下面的loginFilter是我们自定义的

访问接口测试一下。只有api开头的才会被拦截

访问这个地址。页面没有任何输出。

但是后台输出了。

我们传递一个username过去。username等于xdclass就放行了。

快速创建一个新的方法去测试


热加载的时候,重新加载了容器。Filter的destory方法被调用了。

重新加载的时候还是会初始化Filter



换一个错误的username值。什么都没有返回

加一个跳转。然后强制return

静态页面在这里

改成username为aaa

跳转到了index页面

官网的地址对过滤器进行说明
1、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners

Servlet3.0的新特性。是新发布的 还没有大亏摸的应用。里面还有异步

小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器的更多相关文章

  1. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点

    1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍 ...

  2. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解

    笔记 3.SpringBoot2.x整合redis实战讲解 简介:使用springboot-starter整合reids实战 1.官网:https://docs.spring.io/spring-bo ...

  3. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_6、SpringBoot2.xHTTP请求配置讲解

    1.SpringBoot2.xHTTP请求配置讲解 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧 1.@RestController and @RequestMapping是 ...

  4. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍

    笔记 1.SpringBoot2.x持久化数据方式介绍          简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库             开发流程麻烦        ...

  5. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍

    笔记 1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具          1.redis官网 https://redis.io/download   ...

  6. 小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战

    笔记 2.SpringBoot2.x日志讲解和自定义Logback配置实战     简介:讲解SpringBoot2.x整合Logback配置实战 1.官网介绍:https://docs.spring ...

  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_17、SpringBootTest单元测试实战

    笔记 1.@SpringBootTest单元测试实战     简介:讲解SpringBoot的单元测试         1.引入相关依赖              <!--springboot程 ...

  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_22、SpringBoot启动方式和部署war项目到tomcat9

    笔记 1.SpringBoot启动方式讲解和部署war项目到tomcat9 简介:SpringBoot常见启动方式讲解和部署war项目Tomcat 1.ide启动     2.jar包方式启动    ...

  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第7节 SpringBoot常用Starter介绍和整合模板引擎Freemaker、thymeleaf_28..SpringBoot Starter讲解

    笔记 1.SpringBoot Starter讲解     简介:介绍什么是SpringBoot Starter和主要作用 1.官网地址:https://docs.spring.io/spring-b ...

随机推荐

  1. vue-cli3.0 脚手架搭建项目的过程详解

    1.安装vue-cli 3.0 ? 1 2 3 npm install -g @vue/cli # or yarn global add @vue/cli 安装成功后查看版本:vue -V(大写的V) ...

  2. 宁波市第二届CTF之cripto1

    密码学第一题 给的是一个shadow文件,16进制编辑器打开 是一串Linux root用户密码的密文,猜测密码可能就是flag,于是将这一串字符放到文本. linux下爆破用户密码的工具没接触过(还 ...

  3. Centos 7 SSH 无密码登录

    需求 本人使用CENTOS7进行开发调试,所以要经常通过 SSH 连接到服务器进行应用部署与维护.所以,迫切需要有一种方法能够免密码登录到云服务器,而且随处可用. 方案 使用"公私钥&quo ...

  4. linux 非root用户安装nginx

    第一步:首先下载依赖包 下载地址 pcre(www.pcre.org),zlib(www.zlib.org),openssl(www.openssl.org) 第二步:上传那个nginx的安装包 下载 ...

  5. python中的嵌套类

    python中的嵌套类 在.NET和JAVA语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的,今天在python也看到了很不错支持一下.动态语言中很好的嵌套类的实现,应该说嵌套类解决设计问 ...

  6. new 运算符的原理

    关于 new 运算符的原理: 1.红宝书上解释: (1)创建一个新对象 (2)将构造函数的作用域赋给新对象 (3)执行构造函数中的代码 (4)返回新对象 2.MDN上的解释: (1)一个继承自 Foo ...

  7. Oracle的Md5加密

    创建函数 CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval ); BEGIN retval : ...

  8. service worker(一)之离线应用

    serviceWork.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. Vue创建组件的三种方式

    1.使用 Vue.extend 来创建全局的Vue组件 <div id="app"> <!-- 如果要使用组件,直接,把组件的名称,以 HTML 标签的形式,引入 ...

  10. Java设计模式的6大原则

    Java设计模式的6大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.简单来 ...