当前位置: 首页 > article >正文

Spring MVC 拦截器总结

1.简介

Spring MVC提供了拦截器方便在接口调用前后进行一些通用处理。

2.步骤

1.实现一个拦截器类,共有三处拦截时机:

public class Interceptor1 implements HandlerInterceptor {//实现HandlerInterceptor接口

    //执行handler之前调用
    //编码格式处理,登录保护,权限处理
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("Interceptor1.preHandle");
        return true;//拒绝还是通过
    }

    //handler执行完毕后执行
    //检查敏感词汇
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("Interceptor1.postHandle");
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    //整体处理完毕执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("Interceptor1.afterCompletion");
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

2.在配置类中注册拦截类:

public class MvcConfig implements WebMvcConfigurer {//实现WebMvcConfigurer接口
...
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        //方法 1.注册拦截类,拦截全部请求
        registry.addInterceptor(new Interceptor1());

        //方法 2.指定地址拦截
        //通配符:* :一层字符 **:多层字符
        registry.addInterceptor(new Interceptor1())
                .addPathPatterns("/product/**");

        //方法 3.排除拦截
        registry.addInterceptor(new Interceptor1())
                .addPathPatterns("/user/***").excludePathPatterns("/user/data1");
                
		//如果有多个拦截类优先级如何?
		registry.addInterceptor(new Interceptor1())//先声明优先级高,先进后出
                .addPathPatterns("/product/**");
		registry.addInterceptor(new Interceptor2())//后声明优先级低,后进先出
                .addPathPatterns("/product/**");
}

http://www.kler.cn/a/325325.html

相关文章:

  • Gin 框架中的路由
  • [241115] Debian 12.8 发布 | Mistral AI 推出批量 API,成本降低 50%
  • wordpress使用相关
  • UE5运行时创建slate窗口
  • Spring中的Bean
  • SwanLab安装教程
  • 数据结构:树、森林
  • 峟思助力堤防工程安全:构建多功能防洪屏障
  • Qt+toml文件读写
  • 【Linux】环境变量(初步认识环境变量)
  • C++不同的头文件中各种函数的操作使用(长期更新,找到新的就补充进来)
  • Jenkins提示Host key verification failed的解决办法
  • Linux Reverse(1)-LD_PRELOAD
  • workerman 接入文心一言的流式输出
  • 解决错误Cloning failed using an ssh key for authentication
  • android system_server进程
  • 【QT 开发日志】QT 基础控件详解:按钮、文本框与标签的使用
  • AlmaLinux 安裝JDK8
  • 嵌入式学习--LinuxDay04
  • 设计模式之模版方法模式
  • 低代码可视化-uniapp蓝牙标签打印-代码生成器
  • 天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端
  • @overload实际并无作用
  • C# 调用虚拟打印,尝试隐藏进度窗体
  • AfuseKt1.3.6-10110功能强大的安卓网络视频播放器,支持多种在线存储和媒体管理平台!
  • The First项目报告:解读跨链互操作性平台Wormhole