springboot @WebFilter注解过滤器的实现

@WebFilter注解过滤器

@WebFilter加在过滤器的注解上使用

import lombok.extern.slf4j.Slf4j;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(urlPatterns = "/*")
@Slf4j
public class WebFilterTest implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    log.info("WebFilterTest --- init");
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    log.info("WebFilterTest --- doFilter");
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
    log.info("WebFilterTest --- destroy");
  }
}

@WebFilter源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebFilter {
  String description() default "";
  /**Filter显示名*/
  String displayName() default "";
  /**配置参数*/
  WebInitParam[] initParams() default {};
  /**Filter名称*/
  String filterName() default "";

  String smallIcon() default "";

  String largeIcon() default "";
  /**指定对哪些Servlet进行过滤*/
  String[] servletNames() default {};
  /**指定拦截的路径*/
  String[] value() default {};
  /**指定拦截的路径*/
  String[] urlPatterns() default {};
  /**指定Filter对哪种方式的请求进行过滤*/
  DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST};
  /**指定Filter是否支持异步模式*/
  boolean asyncSupported() default false;
}

在springBoot的启动类中加入注解:

import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan

多个@WebFilter注解的过滤器可以配合@Order()注解实现执行过滤的顺序

import org.springframework.core.annotation.Order;

@WebFilter(urlPatterns = "/*")
@Slf4j
@Order(1)
public class WebFilterTest implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    log.info("WebFilterTest --- init");
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    log.info("WebFilterTest --- doFilter");
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
    log.info("WebFilterTest --- destroy");
  }
}
@WebFilter(urlPatterns = "/*")
@Slf4j
@Order(2)
public class WebFilterTest2 implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    log.info("2---WebFilterTest2 --- init");
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    log.info("2 --- WebFilterTest2 --- doFilter");
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
    log.info("WebFilterTest2 --- destroy");
  }
}

执行结果

WebFilterTest --- doFilter
2 --- WebFilterTest2 --- doFilter

不使用注解的方式使用过滤器

创建过滤器类

public class WebFilterTest implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    log.info("WebFilterTest --- init");
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    log.info("WebFilterTest --- doFilter");
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
    log.info("WebFilterTest --- destroy");
  }
}

注册过滤器

@Configuration
public class FilterConfig {

  @Bean
  public WebFilterTest webFilterTest(){
    return new WebFilterTest();
  }

  @Bean
  public FilterRegistrationBean filterRegist(){
    FilterRegistrationBean frBean = new FilterRegistrationBean();
    frBean.setFilter(webFilterTest());
    frBean.setOrder(1);
    frBean.addUrlPatterns("/*");
    return frBean;
  }
}

多个过滤器注册

再添加一个过滤器:

@Slf4j
public class WebFilterTest2 implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
    log.info("2---WebFilterTest2 --- init");
  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    log.info("2 --- WebFilterTest2 --- doFilter");
    filterChain.doFilter(servletRequest,servletResponse);
  }

  @Override
  public void destroy() {
    log.info("WebFilterTest2 --- destroy");
  }
}

修改配置类:

@Configuration
public class FilterConfig {

  @Bean
  public WebFilterTest webFilterTest(){
    return new WebFilterTest();
  }
   @Bean
  public WebFilterTest2 webFilterTest2(){
    return new WebFilterTest2();
  }

  @Bean
  public FilterRegistrationBean filterRegist(){
    FilterRegistrationBean frBean = new FilterRegistrationBean();
    frBean.setFilter(webFilterTest());
    frBean.setOrder(1);
    frBean.addUrlPatterns("/*");
    return frBean;
  }
  @Bean
  public FilterRegistrationBean filterRegist2(){
    FilterRegistrationBean frBean = new FilterRegistrationBean();
    frBean.setFilter(webFilterTest2());
    frBean.setOrder(2);
    frBean.addUrlPatterns("/*");
    return frBean;
  }
}

到此这篇关于springboot @WebFilter注解过滤器的实现的文章就介绍到这了,更多相关springboot @WebFilter注解过滤器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot工程中使用filter过程解析

    一.什么是filter 过滤器实际上就是用来对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 . filter可以在请求到达servlet前或者请求完成响应后进行后续的处理. 二.在springboot工程中使用filter 创建一个filter,并使用注解配置该filter的名称和拦截路径等属性 @WebFilter(filterName = "AFilter",urlPat

  • SpringBoot 2 快速整合 Filter过程解析

    概述 SpringBoot 中没有 web.xml, 我们无法按照原来的方式在 web.xml 中配置 Filter .但是我们可以通过 JavaConfig(@Configuration +@Bean)方式进行配置.通过FilterRegistrationBean 将自定义 Filter 添加到 SpringBoot 的过滤链中. 实战操作 实战操作通过定义一个拦截所有访问项目的URL的 Filter来进行演示的. 首先定义一个统一访问 URL 拦截的 Filter.代码如下: public

  • SpringBoot拦截器Filter的使用方法详解

    前言: 最新Servlet 3.0拦截器的使用 1.pom.xml添加需要使用的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/x

  • spring boot过滤器FilterRegistrationBean实现方式

    有2种方式可以实现过滤器 1:通过FilterRegistrationBean实例注册 2:通过@WebFilter注解生效 这里选择第一种,因为第二种不能设置过滤器之间的优先级 为了演示优先级,这里创建2个测试过滤器类:Test1Filter.Test2Filter 通过实现javax.servlet.Filter接口,覆盖其doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)方法,决定拦截或放行 publi

  • springboot使用filter获取自定义请求头的实现代码

    有个钱包项目,本来用的是微服务这一套,后来感觉没必要,重构成了简单的springboot项目,但是token校验重构完之后出问题了,之前写filter走的是springgateway,基于GatewayFilter实现,重构了之后基于filter,然后当请求进入过滤器的时候,发现不能获取到请求的自定义请求头. String token = request.getHeader("token"); // null String id = request.getHeader("id

  • SpringBoot中使用Filter和Interceptor的示例代码

    一.Filter(过滤器) Filter接口定义在javax.servlet包中,是Servlet规范定义的,作用于Request/Response前后,被Servlet容器调用,当Filter被Sring管理后可以使用Spring容器资源. 实现一个Filter 自定义的过滤器需要实现javax.servlet.Filter,Filter接口中有三个方法: init(FilterConfig filterConfig):过滤器初始化的被调用. doFilter(ServletRequest s

  • Spring Boot使用过滤器Filter过程解析

    这篇文章主要介绍了Spring Boot使用过滤器Filter过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先我们说说什么是过滤器,过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制等,一个资源,没有经过授权,肯定是不能让用户随便访问的,这个时候,也可以用到过滤器.过滤器的功能还有很多,例如实现URL级别的权限控制.压缩响应信息.编码格式等等. 过滤器依赖se

  • springboot @WebFilter注解过滤器的实现

    @WebFilter注解过滤器 @WebFilter加在过滤器的注解上使用 import lombok.extern.slf4j.Slf4j; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; impo

  • 解决springboot中配置过滤器以及可能出现的问题

    在springboot添加过滤器有两种方式: 1.通过创建FilterRegistrationBean的方式(建议使用此种方式,统一管理,且通过注解的方式若不是本地调试,如果在filter中需要增加cookie可能会存在写不进前端情况) 2.通过注解@WebFilter的方式 通过创建FilterRegistrationBean的方式创建多个filter以及设置执行顺序: 1.创建两个实现Filter接口的类TestFilter1 .TestFilter2 package com.aoxun.c

  • Springboot如何设置过滤器及重复读取request里的body

    目录 HttpServletRequest的输入流只能读取一次的原因 重复读取body中数据的方法 springboot的过滤器 上面的getBody的代码 需求: request的content-type为applciation/json,进入controller之前需要把body中的参数取出来做一次处理,然后和hearder中的另一个参数做对比. 思路: 加一个过滤器,在过滤器中取出参数做处理,然后比较 注意: body里的数据用流来读取,只能读取一次 HttpServletRequest的

  • springboot @Valid注解对嵌套类型的校验功能

    @Valid注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则,而在API接收数据时添加@valid关键字,这时你的实体将会开启一个校验的功能,具体的代码如下,是最基本的应用: 实体: public class DepartmentDto { @ApiModelProperty("id") private String id; @ApiModelProperty("上级Id") private String parentId; @ApiModelPr

  • springboot @ComponentScan注解原理解析

    这篇文章主要介绍了springboot @ComponentScan注解原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @ComponentScan 告诉Spring从哪里找到bean. 如果你的其他包都在@SpringBootApplication注解的启动类所在的包及其下级包,则你什么都不用做,SpringBoot会自动帮你把其他包都扫描了. 如果你有一些bean所在的包,不在启动类的包及其下级包,那么你需要手动加上@Compone

  • springboot swagger2注解使用的教程

    swagger2 注解整体说明  最近在使用Swagger的时候忘记了注解的用法,特此记录一下. @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置" @ApiOperation:用在请求的方法上,说明方法的用途.作用 value="说明方法的用途.作用" notes="方法的备注说明" @ApiImplicit

  • springboot @ConditionalOnMissingBean注解的作用详解

    @ConditionalOnMissingBean,它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员. 代码演示 @Component public class AutoConfig { @Bean public AConfig aConfig() { return new AConfig("lind"); } @B

  • java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    # java-SpringBoot自定义参数解析器实现对象自动注入 解析器逻辑流程图表 后台解析注解的解析器 首先,我在java后台编写了一个解析器,代码如下 import com.ruoyi.framework.interceptor.annotation.LoginUser; import com.ruoyi.project.WebMoudle.WebUser.domain.WebUser; import com.ruoyi.project.WebMoudle.WebUser.service

  • SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 2.解释一下注解的作用 @N

  • SpringBoot @Retryable注解方式

    背景 在调用第三方接口或者使用MQ时,会出现网络抖动,连接超时等网络异常,所以需要重试.为了使处理更加健壮并且不太容易出现故障,后续的尝试操作,有时候会帮助失败的操作最后执行成功.一般情况下,需要我们自行实现重试机制,一般是在业务代码中加入一层循环,如果失败后,再尝试重试,但是这样实现并不优雅.在SpringBoot中,已经实现了相关的能力,通过@Retryable注解可以实现我们想要的结果. @Retryable 首先来看一下Spring官方文档的解释: @Retryable注解可以注解于方法

随机推荐