zoukankan      html  css  js  c++  java
  • SpringBoot图文教程6—SpringBoot中过滤器的使用

    有天上飞的概念,就要有落地的实现

    • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍

    • 先赞后看,养成习惯

    SpringBoot 图文系列教程技术大纲

    鹿老师的Java笔记鹿老师的Java笔记

    SpringBoot 图文教程系列文章目录

    1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」
    2. SpringBoot图文教程2—日志的使用「logback」「log4j」
    3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
    4. SpringBoot图文教程4—SpringBoot 实现文件上传下载
    5. SpringBoot图文教程5—SpringBoot 中使用Aop

    前言

    过滤器是Javaweb非常基础的一个概念,属于Servlet的一部分。本文将会使用SpringBoot配置过滤器。在代码实现之前先通过一个简单的小案例解释一下什么是过滤器。

    过滤器filter的概念:Servlet中提供的技术,可以过滤浏览器发出的请求,并且决定放行请求还是中断请求。

    • 浏览器对服务器的请求,会先经过过滤器,再到达服务器
    • 服务器对浏览器的响应,也会先经过过滤器,最后再响应给浏览器
    • 基于过滤器的机制,我们可以在过滤器中对请求和响应做一些处理,可以在过滤器中决定是否放行,例如:校验请求中有没有敏感字符串,校验有没有Session等。

    举个栗子:

    • 过滤器就像疫情期间村口的路卡,你不管进村儿还是出村儿都需要经过路卡

    • 路卡的工作人员(过滤器)会在你经过的时候对你做一些”操作“,量量体温,问询一下,然后对你一些处理,放行或者让你原路返回。

    SpringBoot中过滤器的使用

    本文所有的内容,将会在下面的demo上进行操作。 请去Git仓库下载:https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

    1.创建过滤器类

    /**
     * @WebFilter时Servlet3.0新增的注解,原先实现过滤器,需要在web.xml中进行配置,而现在通过此注解,启动启动时会自动扫描自动注册。
     *
     * @WebFilter filterName 定义注册的过滤器的名字
     * urlPatterns 定义要拦截所有的请求
     *
     */
    @WebFilter(filterName="userFilter",urlPatterns={"/*"})
    public class UserFilter implements Filter {
        Logger logger = LoggerFactory.getLogger(UserFilter.class);

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            logger.info("过滤器初始化");
        }

        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            logger.info("请求处理");
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
    //        简单的session校验
            if (request.getSession().getAttribute("user")!=null) {
                //        请求放行
                filterChain.doFilter(request, response);
            }else {

            }

        }

        @Override
        public void destroy() {
            logger.info("销毁");
        }
    }

    2.SpringBoot配合过滤器扫描

    @WebFilter时Servlet3.0新增的注解,原先实现过滤器,需要在web.xml中进行配置,而现在通过此注解,启动启动时会自动扫描自动注册。

    在SpringBoot中配置过滤器扫描只需要在启动类加入@ServletComponentScan注解即可。

    3.设置多个过滤器的执行顺序

    你一定听过这样的一个词儿:过滤器链路,什么是过滤器链路呢?就是有多个过滤器,就像有多个路卡是一样一样的。当你有多个过滤器之后,就需要规定各个过滤器的指定顺序了。那么怎么指定过滤器的执行顺序呢?

    SpringMvc中通过web.xml可以设置

    在SpringBoot中可以通过FilterRegistrationBean进行过滤器的注册。

    1. 创建两个Filter类 删除@WebFilter注解即可


    2. 在启动类中通过@Bean的方式配置FilterRegistrationBean

    @SpringBootApplication
    @ServletComponentScan
    public class AppRun {
        public static void main(String[] args) {
            //        参数:启动类类对象 主函数形参名
            SpringApplication.run(AppRun.class,args);
        }

        @Bean
        public FilterRegistrationBean  filterRegistrationBean(UserFilter userFilter) {
            FilterRegistrationBean registration = new FilterRegistrationBean();

            registration.setFilter(userFilter);
            //过滤器名称
            registration.setName("userFilter");
            //拦截路径
            registration.addUrlPatterns("/*");
            //设置顺序
            registration.setOrder(10);
            return registration;
        }


        @Bean
        public FilterRegistrationBean  filterRegistrationBean2(User2Filter user2Filter) {
            FilterRegistrationBean registration = new FilterRegistrationBean();
    //        设置过滤器
            registration.setFilter(user2Filter);
            //过滤器名称
            registration.setName("user2Filter");
            //拦截路径
            registration.addUrlPatterns("/*");
            //设置顺序
            registration.setOrder(20);
            return registration;
        }

        @Bean
        public UserFilter userFilter(){
            return new UserFilter();
        }

        @Bean
        public User2Filter user2Filter(){
            return new User2Filter();
        }
    }

    注册多个时,就注册多个FilterRegistrationBean即可。启动之后的效果如下:

    总结

    以上就是SpringBoot中过滤器的简单使用,本文为基础篇,所以关于过滤器的应用会在后续文章中写出。

    恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

    让我们再次回顾本文的学习目标

    • 掌握SpringBoot中过滤器的使用

    要掌握SpringBoot更多的用法,请持续关注本系列教程。

    下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,希望你能够成热打铁,将知识夯扎实。

    上期自测面试题答案

    见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

    自测面试题(答案见下期)

    上期自测实现项目小案例答案

    见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

    自测实现项目小案例(答案见下期)

    本次需求:

    练习文中demo

    求关注,求点赞,求转发

    欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。

  • 相关阅读:
    unset全局变量运用问题详解
    servlet
    windows 下 Eclipse+python开发环境配置
    连接mysql
    filter
    DotNetNuke 中文乱码问题的解决
    如何解决InfoPath的分页问题
    转:windows installer出错信息解决
    SQL中文全文搜索效果不理想问题的解决
    转:解决WEB页面上"焦点控制"一法
  • 原文地址:https://www.cnblogs.com/bingyang-py/p/12362893.html
Copyright © 2011-2022 走看看