当前位置: 首页 > 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/news/325325.html

相关文章:

  • 数据结构:树、森林
  • 峟思助力堤防工程安全:构建多功能防洪屏障
  • 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
  • 点餐小程序实战教程13餐桌管理
  • 雷池 WAF 如何配置才能正确获取到源 IP
  • GAMES101(作业8)
  • MySQL 加字段锁表怎么解决??
  • 情感短视频素材上哪里找?推荐几个热门情感视频素材资源网站
  • CEPH的写入流程
  • @JsonFormat与@DateTimeFormat的区别
  • 智能监控,守护绿色能源:EasyCVR在电站视频监控中心的一站式解决方案
  • PostgreSQL数据库与PostGIS在Windows中的部署与运行
  • 25基于python的文本冒险岛游戏(源码+游戏简介+python代码学习攻略)校园招聘面试