IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot 拦截器实现注意要点 -> 正文阅读

[Java知识库]springboot 拦截器实现注意要点

一、Interceptor 实现方式

  1. 实现HandlerInterceptor
  2. 继承WebRequestInterceptor
    两者的区别不大,针对于 preHandle 这个方法的时候,继承WebRequestInterceptor类的不需要返回值,但是实现HandlerInterceptor接口的,需要一个Boolean类型的返回值,true 的才会往下走,false的话就会中断请求,常用的是第一种。
  • 继承WebRequestInterceptor
@Override
    public void preHandle(WebRequest request) throws Exception {
    }
    @Override
    public void postHandle(WebRequest request, ModelMap model) throws Exception {
    }
    @Override
    public void afterCompletion(WebRequest request, Exception ex) throws Exception {
    }
  • 实现HandlerInterceptor
 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) { 
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
    }

二、针对于springboot 需要的一些配置参数

  1. 需要一个配置类实现 WebMvcConfigurer来加载拦截器
@Configuration
public class Config implements WebMvcConfigurer {

    @Autowired
    private ApiSignInterceptor apiSignInterceptor;


    @Override //拦截器配置
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(apiSignInterceptor) //拦截器注册对象
                .addPathPatterns("/**") //指定要拦截的请求
        /*.excludePathPatterns("/user/login")*/; //排除请求
    }

}

这里有一个很重要的点,就是拦截器引入,主要是针对 addInterceptors方法。一些人可能会这么去写:
通过new 的方式直接去加载拦截器

@Override //拦截器配置
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new ApiSignInterceptor()) 
    }

实际上,这两种都是可以实现的,通过@Autowired 的方式去引入你的拦截器,你可以直接在拦截器里面引入其他service来写你的一些业务代码,比如存表之类的,不然的话,你通过new 的方式引入拦截器,你在拦截器里面引入其他的service,会是null,无法使用。

三、异常处理

拦截器里的异常是可以被全局异常捕获的,所以写个全局异常类就可以了,不需要额外在跳到controller里面或者通过response来传递。

@RestControllerAdvice
public class GlobalExceptionAdvice {
/**
     * 业务异常
     * @return ResponseBean<T> WEB层统一返回对象
     */
    @ExceptionHandler({ BizException.class })
    public ResponseBean<T> handleBizException(BizException e) {
        LogUtil.warn(e, "业务异常");
        return new ResponseBean<>(e.getErrorCode(), e.getErrorMsg());
    }
}

四、拦截器失效的几种情况

  1. 如果有其他config 继承了 WebMvcConfigurationSupport 类的,会导致拦截器失效。
  2. 拦截器没有加到配置里的。
  3. springboot 的Application 包位置未扫描到,需要加Scan的范围。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 10:55:43  更:2022-05-06 10:58:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:12:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码