• SpringMVC拦截器


    在这里插入图片描述

    🍁博客主页:👉不会压弯的小飞侠
    ✨欢迎关注:👉点赞👍收藏⭐留言✒
    ✨系列专栏:👉SpringMVC注解开发
    ✨如果觉得博主的文章还不错的话,请三连支持一下博主。
    🔥欢迎大佬指正,一起 学习!一起加油!

    在这里插入图片描述


    🍁拦截器概念

    • 拦截器( Interceptor)是一种动态拦截方法调用的机制
    • 作用:
      • 在指定的方法调用前后执行预先设定后的的代码
      • 阻止原始方法的执行

    🍁拦截器与过滤器区别

    • 归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
    • 拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强

    🍁创建拦截器类

    • 创建一个拦截器文件夹interceptor,这个文件夹放在controller文件夹中,因为拦截器本来就与表现层有关。
    • 声明拦截器的bean,并实现HandlerInterceptor接口(注意:扫描加载bean)
    • ProjectInterceptor
    @Component
    //定义拦截器类,实现HandlerInterceptor接口
    //注意当前类必须受Spring容器控制
    public class ProjectInterceptor implements HandlerInterceptor {
        @Override
        //原始方法调用前执行的内容
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle...");
            return true;
        }
    
        @Override
        //原始方法调用后执行的内容
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle...");
        }
    
        @Override
        //原始方法调用完成后执行的内容
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion...");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    🍁配置拦截器类

    @Configuration
    public class SpringMvcSupport extends WebMvcConfigurationSupport {
        @Autowired
        private ProjectInterceptor projectInterceptor;
    
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        }
    
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            //配置拦截器
            registry.addInterceptor(projectInterceptor).addPathPatterns("/books" );
            //访问localhost/books/1
            //配置拦截器
            // registry.addInterceptor(projectInterceptor).addPathPatterns("/books/*" );
            //配置多个拦截器
            //registry.addInterceptor(projectInterceptor).addPathPatterns("/books/*" ,"/books" );
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    🍁SpringMVC添加SpringMvcSupport包扫描

    @Configuration
    @ComponentScan({"com.jkj.controller","com.jkj.config"})
    @EnableWebMvc
    public class SpringMvcConfig{
       
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    🍁修改拦截器拦截规则

    • 定义配置类,继承webMvcConfigurationSupport,实现addInterceptor方法(注意:扫描加载配置)
    • 添加拦截器并设定拦截的访问路径,路径可以通过可变参数设置多个
    • 访问http://localhost/books/1时拦截器就会被执行。
    • 拦截器中的preHandler方法,如果返回true,则代表放行,会执行原始Controller类中要请求的方法,如果返回false,则代表拦截,后面的就不会再执行了。
    @Configuration
    public class SpringMvcSupport extends WebMvcConfigurationSupport {
        @Autowired
        private ProjectInterceptor projectInterceptor;
    
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        }
    
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            //配置拦截器
            registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*" );
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    🍁简化SpringMvcSupport的编写

    • 不需要再写SpringMvcSupport类,侵入式较强,不建议使用
    @Configuration
    @ComponentScan({"com.jkj.controller"})
    @EnableWebMvc
    //实现WebMvcConfigurer接口可以简化开发,但具有一定的侵入性
    public class SpringMvcConfig implements WebMvcConfigurer {
        @Autowired
        private ProjectInterceptor projectInterceptor;
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            //配置多拦截器
            registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    MySQL面试题-索引的基本原理及相关面试题
    Android AlarmManager定时器设置
    设计模式浅析
    pg数据库实现 根据两个表某一个字段一样,去更新另一个字段的sql 语句
    Windows11与CentOS7下配置与检测JDK与Maven环境变量
    flask-vue-sqlite3-->api接口-优化版本
    C++ - 封装 unordered_set 和 unordered_map - 哈希桶的迭代器实现
    Spring Cloud【分组消费、为什么需要链路追踪 、Spring Cloud Sleuth是什么、微服务集成Sleuth实现链路打标】(十二)
    java中的clone方法
    java Spring框架 XML配置和注解配置的区别
  • 原文地址:https://blog.csdn.net/qq_43514330/article/details/125983321