• SpringMVC-拦截器概念及入门案例


    目录

    一、拦截器概念

    二、拦截器入门案例


    一、拦截器概念

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行

    作用:

    在指定的方法调用前后执行预先设定的代码

    阻止原始方法的执行 

    拦截器与过滤器区别 

    归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术

    拦截内容不同:Filter对所有的访问进行增强,Interceptor仅针对SpringMVC的访问进行增强

    二、拦截器入门案例

    1、声明拦截器的bean,并实现HandlerInterceptor接口(注意:扫描加载bean)

    1. @Component
    2. //定义拦截器类,实现HandlerInterceptor接口
    3. //注意当前类必须受Spring容器控制
    4. public class ProjectInterceptor implements HandlerInterceptor {
    5. @Override
    6. //原始方法调用前执行的内容
    7. //返回值类型可以拦截控制的执行,true放行,false终止
    8. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    9. System.out.println("preHandle...");
    10. return true;
    11. }
    12. @Override
    13. //原始方法调用后执行的内容
    14. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    15. System.out.println("postHandle...");
    16. }
    17. @Override
    18. //原始方法调用完成后执行的内容
    19. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    20. System.out.println("afterCompletion...");
    21. }
    22. }

    2、定义配置类,继承WebMvcConfigurationSupport,实现addInterceptor(注意扫描加载配置)

    1. @Configuration
    2. public class SpringMvcSupport extends WebMvcConfigurationSupport {
    3. @Override
    4. protected void addInterceptors(InterceptorRegistry registry) {
    5. 。。。
    6. }
    7. }

    3、添加拦截器并设定拦截的访问路径,路径可以通过可变参数设置多个

    1. @Configuration
    2. public class SpringMvcSupport extends WebMvcConfigurationSupport {
    3. @Autowired
    4. private ProjectInterceptor projectInterceptor;
    5. @Override
    6. protected void addInterceptors(InterceptorRegistry registry) {
    7. //配置拦截器
    8. registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
    9. }
    10. }

    4、使用标准接口WebMvcConfigurer简化开发(注意:侵入式较强)

    1. @Configuration
    2. @ComponentScan({"com.itheima.controller"})
    3. @EnableWebMvc
    4. //实现WebMvcConfigurer接口可以简化开发,但具有一定的侵入性
    5. public class SpringMvcConfig implements WebMvcConfigurer {
    6. @Autowired
    7. private ProjectInterceptor projectInterceptor;
    8. @Override
    9. public void addInterceptors(InterceptorRegistry registry) {
    10. //配置拦截器
    11. registry.addInterceptor(projectInterceptor).addPathPatterns("/books","/books/*");
    12. }
    13. }

    拦截器执行流程

    preHandle() :该方法在控制器方法之前执行,如果返回false,说明拦截器不放行该请求,自己处理或者结束该请求。如果返回true,说明拦截器放行该请求,由其它匹配的拦截器或者控制器继续处理。
    postHandle():该方法在控制器方法调用之后,且解析视图之前执行,可以通过此方法对请求域中的模型和视图做出进一步的修改。
    afterCompletion():该方法会在整个请求完成,即视图渲染结束之后执行。

  • 相关阅读:
    语音助手开发小记(2023.9.25)
    阿里P8总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
    实战SpringMVC之CRUD
    ▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch1 基本概念
    K8S 应用部署
    【AI设计模式】04-数据处理-Eager模式
    本地电脑搭建web服务器、个人博客网站并发布公网访问 【无公网IP】(1)
    python 文件分割成几份
    YOLOv4 论文总结
    世界杯小组赛频繁爆冷?这或许是强队的谋略 一分钟带你了解2022卡塔尔世界杯赛制
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/125592579