我是靠谱客的博主 感性白昼,最近开发中收集的这篇文章主要介绍SpringBoot项目中过滤器Filter的配置一、使用@WebFilter+@ServletComponentScan二、采用配置类配置过滤器,使用注解@Configuration和@Bean,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、使用@WebFilter+@ServletComponentScan

具体步骤:

1.新建过滤器类实现Filter,重写doFilter方法

2.在启动类上加@ServletComponentScan注解

注意事项:

二、采用配置类配置过滤器,使用注解@Configuration和@Bean

具体步骤:

1.创建过滤器实现Filter类,重写doFilter方法

2.写一个配置类,在上面加上注解@Configuration

3.在配置类中写方法返回FilterRegistrationBean,并加注解@Bean

配置过滤器,使用FilterRegistrationBean中的方法

1.setFilter

2.setOrder

3.addUrlPatterns

4.setName

5.setUrlPatterns


一、使用@WebFilter+@ServletComponentScan

具体步骤:

1.新建过滤器类实现Filter,重写doFilter方法

例:跨域认证过滤器

@WebFilter(filterName="filter01",urlPatterns={"*"})
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) response;
        resp.setHeader("Access-Control-Allow-Origin", "*");//允许访问的来源,如指定http://127.0.0.1:5500
        resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");//允许通过的方法,options跨域请求方法
        resp.setHeader("Access-Control-Max-Age", "3600");//指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求。
        resp.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type,jwt");//允许通过的请求头,可使用通配符*
        response.setHeader("Access-Control-Expose-Headers", "jwt");//使响应头可以被访问,暴露出来
        chain.doFilter(request, response);
    }
}

2.在启动类上加@ServletComponentScan注解

例:oaApplication

@ServletComponentScan
public class OaApplication {

    public static void main(String[] args) {
        SpringApplication.run(OaApplication.class, args);
    }

}

注意事项:

1.filter执行顺序和类名字典顺序有关,指定@WebFilter注解属性filtername与@Order都无法改变执行顺序

2.如果只有一个过滤器,不用管其他配置,也可以使用@Component注解

二、采用配置类配置过滤器,使用注解@Configuration和@Bean

具体步骤:

1.创建过滤器实现Filter类,重写doFilter方法

和上面一样,但类上不加任何信息,例:新建一个权限过滤器

public class AccessFilter implements Filter {
    @Autowired
    private AccessService accessService;
}

2.写一个配置类,在上面加上注解@Configuration

3.在配置类中写方法返回FilterRegistrationBean,并加注解@Bean

@Configuration
public class WebConfig {

    @Bean
    public FilterRegistrationBean corsFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        CorsFilter corsFilter = new CorsFilter();//无法在filter中注入bean
        filterRegistrationBean.setFilter(corsFilter);
        filterRegistrationBean.addUrlPatterns("*");//配置过滤规则
        filterRegistrationBean.setOrder(Integer.MIN_VALUE);//执行次序
        return filterRegistrationBean;
    }
    @Bean
    public FilterRegistrationBean accessFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(getAccessFilter());//注入的bean不为null
        filterRegistrationBean.addUrlPatterns("*");//配置过滤规则
        filterRegistrationBean.setOrder(1);//执行次序
        return filterRegistrationBean;
    }
    @Bean
    public AccessFilter getAccessFilter(){
        return new AccessFilter();
    }
}

配置过滤器,使用FilterRegistrationBean中的方法

1.setFilter

将建好的过滤器类对象传进去
指明需要被注册的过滤器,即是哪个过滤器的Bean

2.setOrder

    设置过滤器执行次序
    数字越小越先执行
    为保证一定最先执行,可以使用Integer.MIN_VALUE

3.addUrlPatterns

配置过滤器规则

4.setName

 设置过滤器名称

5.setUrlPatterns

 配置多个过滤规则,参数List<String>

最后

以上就是感性白昼为你收集整理的SpringBoot项目中过滤器Filter的配置一、使用@WebFilter+@ServletComponentScan二、采用配置类配置过滤器,使用注解@Configuration和@Bean的全部内容,希望文章能够帮你解决SpringBoot项目中过滤器Filter的配置一、使用@WebFilter+@ServletComponentScan二、采用配置类配置过滤器,使用注解@Configuration和@Bean所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部