zoukankan      html  css  js  c++  java
  • SpringBoot入门到精通系列教程

    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 ----------

  • 相关阅读:
    Django搭建环境_初始化
    Python3 获取以及解析json格式
    python遍历目录树删除指定后缀的文件
    redis基础
    Centos7 更换阿里yum源
    Python3 实现带cookie登陆网站--自动
    Python3 requests实现cookie登陆--手动
    Flask中使用Editormd上传图片
    Flask中数据库的多对多关系
    Flask中博客类的Post实现
  • 原文地址:https://www.cnblogs.com/skywind/p/spring-boot-filter-webfilter.html
Copyright © 2011-2022 走看看