• Spring Boot配置过滤器的两种方式


    过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验、权限控制、敏感词过滤等,下面介绍下Spring Boot配置过滤器的两种方式。

    本文目录

    一、@WebFilter注解方式二、@Bean注解方式三、查看运行效果

    一、@WebFilter注解方式

    使用@WebFilter注解为声明当前类为filter,第一个参数为该filter起一个名字,第二个参数为说明要拦截的请求地址,当前类需要实现Filter接口,里面有三个方法,分别为过滤器初始化、过滤方法和过滤器销毁。

    @Slf4j
    @WebFilter(filterName = "myFilter1", urlPatterns = "/*")
    public class MyFilter1 implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            log.info(filterConfig.getFilterName() + " init");
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
            log.info("myFilter1 begin");
            try {
                log.info("业务方法执行");
                chain.doFilter(request, response);
            } catch (Exception e) {
                log.error("error!", e);
            }
            log.info("myFilter1 end");
        }

        @Override
        public void destroy() {
        }
    }

    启动类添加@ServletComponentScan注解,@ServletComponentScan注解所扫描的包路径必须包含该Filter,代码如下:

    @SpringBootApplication
    @ServletComponentScan(basePackages = "com.example.demo.filter")
    public class DemoApplication {

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

    二、@Bean注解方式

    新建MyFilter2.java类,不要加注解@WebFilter,代码如下:

    @Slf4j
    public class MyFilter2 implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            log.info(filterConfig.getFilterName() + " init");
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
            log.info("myFilter2 begin");
            try {
                log.info("业务方法执行");
                chain.doFilter(request, response);
            } catch (Exception e) {
                log.error("error!", e);
            }
            log.info("myFilter2 end");
        }

        @Override
        public void destroy() {
        }
    }

    新建配置类WebConfig.java,配置bean,代码如下:

    @Configuration
    public class WebConfig {

        @Bean
        public FilterRegistrationBean testFilterRegistration() {
            FilterRegistrationBean registration = new FilterRegistrationBean(new MyFilter2());
            registration.addUrlPatterns("/test"); //
            registration.setName("myFilter2");
            return registration;
        }
    }

    三、查看运行效果

    项目启动后浏览器访问http://localhost:8080/test,可以看到过滤器已生效,后台打印日志如下:

    [nio-8080-exec-1] com.example.demo.filter.MyFilter1        : myFilter1 begin
    [nio-8080-exec-1] com.example.demo.filter.MyFilter1        : 业务方法执行
    [nio-8080-exec-1] com.example.demo.filter.MyFilter1        : myFilter1 end 

    到此Spring Boot配置过滤器的两种方式已经全部实现,有问题欢迎留言沟通哦!
    完整源码地址: https://github.com/suisui2019/springboot-study

    推荐阅读

    1.Spring Boot统一异常处理实战
    2.从技术的角度分析下为什么不要在网上发“原图”
    3.利用Spring Boot+zxing,生成二维码还能这么简单
    4.Spring Boot之Profile--快速搞定多环境使用与切换
    5.利用Spring Boot+WxJava实现网站集成微信登录功能


    限时领取免费Java相关资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。
    关注下方公众号即可免费领取:

    Java碎碎念公众号Java碎碎念公众号

     

  • 相关阅读:
    赋值运算符重载
    拷贝构造函数
    sizeof与strlen
    C++函数参数为引用或指针
    Largest Rectangle in Histogram
    二极管作用
    yzoj P1948 取数字问题
    NOIP 2016 愤怒的小鸟 题解
    NOIP 2016 蚯蚓 题解
    NOIP 2016 组合数问题 题解
  • 原文地址:https://www.cnblogs.com/haha12/p/11472582.html
Copyright © 2020-2023  润新知