Java教程

Springboot 过滤器和拦截器

本文主要是介绍Springboot 过滤器和拦截器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
过滤器和拦截器

过滤器(Filter)

过滤器是对数据进行过滤和预处理。开发人员可以对客户端提交的数据进行过滤处理,也可以对服务器返回的数据进行处理。

比如验证用户的登录情况,权限验证,对静态资源进行访问权限控制等...

过滤器使用的两种方式

注解配置

  • 定义一个JwtFilter 实现Filter接口。重写里面的三个方法。(按Ctrl+I 一键重写)

    package com.smile.blog.filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    @WebFilter(filterName = "jwtFilter",urlPatterns = "/*")
    public class jwtFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            //jwt 过滤器开启
            System.out.println("jwt 过滤器开始");
    
            Filter.super.init(filterConfig);
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("开始验证 ...");
    
            filterChain.doFilter(servletRequest,servletResponse);
    
            System.out.println("验证结束 ....");
        }
    
        @Override
        public void destroy() {
            //jwt过滤器结束
            System.out.println("jwt 过滤器结束");
    
            Filter.super.destroy();
        }
    }
    

    解释说明:

    1. @WebFilter注解,用于将类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值)

      dnof8a5zf5c00000

    2. @Order注解,用于定义组件的加载顺序,值越小,加载的优先级越高

    3. init()方法只会执行一次,初始化过滤器

    4. destory()只会在项目停止或项目重新部署执行

    5. doFilter()核心方法,配置过滤器的逻辑代码

      @Override
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
          //预处理
          System.out.println("开始验证 ...");
          
          filterChain.doFilter(servletRequest,servletResponse);
          
          //后处理(处理servletResponse)
          System.out.println("验证结束 ....");
      }
      

      对每个请求及响应增加额外的预处理和后处理逻辑。执行该方法之前,即对用户请求进行预处理,执行该方法后,即对服务器进行后处理。

  • 在Application上添加注解@ServletComponentScan

    解释说明:@ServletComponentScan注解后,Servlet,Filter,Listener可以直接通过@WebServlet,@WebFilter,@WebListener注解自动注册

    package com.smile.blog;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    
    @SpringBootApplication
    @ServletComponentScan
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }
    
  • 结果验证

    image-20220310004752730

java配置

  • 定义java
这篇关于Springboot 过滤器和拦截器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!