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

Spring MVC 拦截器使用

javaweb过滤器和springmvc拦截器:

拦截器的概念


拦截器使用

1/创建拦截器类,类中实现  handler执行前,执行后与渲染视图后的具体实现方法 

public class GlobalExceptionHandler implements HandlerInterceptor {

    // if( ! preHandler()){return;}
    // 在处理请求的目标 handler 方法前执行
    // 登录保护,权限处理等
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("request = " + request + ", response = " + response + ", handler = " + handler);
        System.out.println("Process01Interceptor.preHandle");
         
        // 会拦截请求,处理内容return true:则放行请求
        // 返回false:不放行
        return true;
    }
 
    // 在目标 handler 方法之后,handler报错不执行!
    // 因为已经执行完毕,所以没有拦截机制,也不会返回布尔类型
    // 一般是对结果进行处理,比如结果脱敏,敏感词汇检查
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("request = " + request + ", response = " + response + ", handler = " + handler + ", modelAndView = " + modelAndView);
        System.out.println("Process01Interceptor.postHandle");
    }
 
    // 渲染视图之后执行(最后),一定执行!
    // handler报错,会报异常
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("request = " + request + ", response = " + response + ", handler = " + handler + ", ex = " + ex);
        System.out.println("Process01Interceptor.afterCompletion");
    }
}

2/springmvcConfig配置中添加拦截器

细化拦截

默认拦截全部请求

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalExceptionHandler());
    }

精准拦截地址 

路径可以设置多个,中间 , 间隔

支持精准路径,也支持模糊路径  /*    /**   /user/*    */user 等等均可 

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalExceptionHandler()).addPathPatterns("/USER/DATA");
    }

排除拦截

注:排除拦截的对象应该在拦截的范围内 

@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new GlobalExceptionHandler()).addPathPatterns("/USER/*").excludePathPatterns("/USERDATA");
        // registry.addInterceptor(new GlobalExceptionHandler());
    }

多个拦截器的执行顺序

执行顺序与filter类似,优先级高的在外层,优先级低的在内层。

具体描述:

1. preHandle() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置顺序调用各个 preHandle() 方法。
2. postHandle() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置相反的顺序调用各个 postHandle() 方法。
3. afterCompletion() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置相反的顺序调用各个 afterCompletion() 方法。


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

相关文章:

  • Linux系统上后门程序的原理细节,请仔细解释一下
  • Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框
  • 编码器线:精准连接,高效传动,引领未来科技的脉动
  • “三带一”算法题
  • Python八字排盘系统实现分析
  • 【vulhub/wordpress靶场】------获取webshell
  • 音视频之H.265码流分析及解析
  • SpringBoot第四站(1):数据层开发: 配置数据源,整合jdbcTemplate
  • Node.js技术原理分析系列6——基于 V8 封装一个自己的 JavaScript 运行时
  • STM32 模拟SPI 模式0
  • 【数据结构】单源最短路径dijkstra算法描述及模板
  • 【Linux】信号:产生信号
  • Unity 接入抖音小游戏
  • 低代码与在线教育系统源码:企业内训平台开发的新思路
  • 智慧社区、智慧消防物联网解决方案PPT(68页)
  • 标准化欧氏距离公式
  • 移动端医疗AI诊断系统的设计思路与技术展望——多模态生理数据分析的理论框架探讨
  • uniapp配置代理解决跨域问题
  • C#入门学习记录(五)轻松掌握条件分支与循环语句
  • uniapp 实现的下拉菜单组件