首页 > 其他分享 >springboot注册过滤器

springboot注册过滤器

时间:2023-06-17 21:44:37浏览次数:42  
标签:springboot FilterRegistrationBean servletResponse bean 注册 过滤器 servletRequest pub

springboot注册过滤器

需要使用过滤器的话,优先选择拦截器。因为拦截器符合 aop 思想。

在springboot中使用过滤器有三种方式。分别如下

方式一:传统 web

在传统javaweb、ssm中使用过滤器差不多类似,这里以 java配置为例,实现 Filter 接口

@WebFilter("/*")
public class MyFilter01 implements Filter {
    /*
    缺点:当有多个过滤器时,没有优先级,不能设置谁先执行
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter01");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

上述实现方式缺点就是当存在多个过滤器时,不能设置谁优先执行。

方式二:以组件

这种方式解决了当存在多个过滤器时,不能设置谁优先执行的问题。方式如下

@Component
@Order(99)//值小优先级高
public class MyFilter02 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter02");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

通过将过滤器以组件方式注入到springboot容器中,这样可以就通过 @Order注解来设置优先执行了。但是缺点是不能设置过滤的路径。

@Order:设置的值小,则优先级高

方式三:通过配置类

这种方式解决了上述两种方式的问题,思路是将过滤器通过配置类,配置其实例,来使用。

public class MyFilter04 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter04");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
public class MyFilter05 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter05");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

上述为过滤器,然后将过滤器通过配置类来配置其实例

@Configuration
public class FilterConfiguration {
    @Bean
    FilterRegistrationBean<MyFilter04> filterRegistrationBean04(){
        //通过FilterRegistrationBean类配置过滤器
        FilterRegistrationBean<MyFilter04> bean = new FilterRegistrationBean<>();
        bean.setFilter(new MyFilter04());
        bean.setUrlPatterns(Arrays.asList("/*"));
        bean.setOrder(70);
        return bean;
    }
    
    @Bean
    FilterRegistrationBean<MyFilter05> filterRegistrationBean05(){
        FilterRegistrationBean<MyFilter05> bean = new FilterRegistrationBean<>();
        bean.setFilter(new MyFilter05());
        bean.setUrlPatterns(Arrays.asList("/*"));
        bean.setOrder(69);
        return bean;
    }
}

在配置类中通过 FilterRegistrationBean 就可将过滤器注入容器中,通过其对象来设置过滤的 url、排序、过滤器

标签:springboot,FilterRegistrationBean,servletResponse,bean,注册,过滤器,servletRequest,pub
From: https://www.cnblogs.com/xiarongblogs/p/17488296.html

相关文章

  • SpringBoot整合ActiveMQ
    第一步: 第二步: 第三步: 下面如有需要才使用 ......
  • Springboot整合mongodb
    入门案例创建工程,导入依赖导入依赖点击查看代码<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.3.9.RELEASE</version>......
  • SpringBoot--MQ不生效
    Cannotresolveconfigurationproperty'rabbitmq.username'rabbitmq:username:adminpassword:adminvirtual-host:test_datalistener:simple:#表示消费者消费成功消息以后需要手工的进行签收(ack确认),默认为autoacknowledge-mode:manualprefet......
  • springboot @Bean自动注册
    这个注解,可以注册Bean到spring容器中@BeanpublicXXXBeanxxxBean(){returnnewXXXBean();}这个注解也可以用在void方法上,用在在spring容器启动后固定执行某个代码逻辑:@BeanpublicvoidxxxHandler(){System.out.println("我想容器启动后执行一次某个代......
  • SpringBoot学习笔记
    新建SpringBoot项目阿里云地址:https://start.aliyun.com异常消息处理//1.自定义异常类,继承RuntimeExceptionpublicclassMyExceptionextendsRuntimeException{publicMyException(){}}//2.定义全局异常类@RestControllerAdvicepublicclassGloabExcept......
  • Docker 安装 Nacos 注册中心
    废话不多说直接上安装脚本:dockerrun-d--namenacos2.0.4--restart=always\-eMODE=standalone\-eJVM_XMS=256m\-eJVM_XMX=512m\-eSPRING_DATASOURCE_PLATFORM=mysql\-eMYSQL_SERVICE_HOST=localhost\-eMYSQL_SERVICE_PORT=3307\-eMYSQL_SERVICE_DB_NAME=n......
  • Vue全局过滤器的使用以及在template三元运算符中内使用过滤
    新建filters.js如下,内容过滤可以自己写函数,记得export导出importdayjsfrom"dayjs";//转小写letlower=value=>value.toLowerCase();//转大写letupper=value=>value.toUpperCase();letcurrencyStyle=(value,style)=>{//货币格式/***sty......
  • Docker 安装 Nacos 注册中心
    废话不多说直接上安装脚本:dockerrun-d--namenacos2.0.4--restart=always\-eMODE=standalone\-eJVM_XMS=256m\-eJVM_XMX=512m\-eSPRING_DATASOURCE_PLATFORM=mysql\-eMYSQL_SERVICE_HOST=localhost\-eMYSQL_SERVICE_PORT=3307\-eMYSQL_SERVICE_DB_NAME=......
  • SpringBoot整合JavaMail
    第一步:第二步: 第三步:第四步: ......
  • springboot2 自动装配原理
    springboot自动装配Spring支持两种bean配置方式:XML配置、JavaConfig配置@SpringBootApplication注解我们创建一个springboot项目后,一般要用该注解,然后在springbootApplication.run方法传入标注了该注解的类,这样就可以去加载spring的相关操作@SpringBootApplicationpublic......