拦截器是什么?

一、概念

拦截器分为两种:

请求拦截器响应拦截器

请求拦截器一般会统一在请求头中添加token;响应拦截器一般会处理异常错误信息,以及遇到401后跳转登录页

拦截器的作用主要是在axios请求和响应之前拦截请求

二、应用场景

1、请求拦截器应用场景:

  可以给所有的axios请求设置请求头

(1)不使用拦截器: 我们需要手动给页面每一个axios都设置请求头

(2)使用拦截器: 只需要在拦截器中给axios设置请求头即可(因为所有的axios请求都会先进入请求拦截器)

语法:

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 本地有token就在请求头添加token
    if (localStorage.getItem('token')) {
        config.headers.Authorization = localStorage.getItem('token')
    }
    return config
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
})

2、响应拦截器应用场景:

(1)拦截401,如果遇到401错误就可以直接跳转登录页

(2)对请求错误统一处理:弹出提示框

语法:

// 添加响应拦截器
axios.interceptors.response.use(
    function (response) {
        // 对响应数据做点什么
        return response
    },
    function (error) {
        // 对响应错误做点什么
        // 如果是401错误,说明token没有 或 过期,就跳转登录页
        if (error.response.status === 401) {
            //  删除过期的token
            localStorage.removeItem('token')
            alert('请先登录')
            location.href = './login.html'
        } else {//其他的错误,就弹出提示框
            Toast.fail(error.response.data.message)
        }
        return Promise.reject(error)
    })

### Spring MVC 拦截器概念 在Spring MVC框架中,拦截器(Interceptor)用于拦截用户的请求并进行预处理或后处理。这使得开发者能够在控制器方法调用前后执行特定逻辑,如权限验证、日志记录或是用户登录状态检查等功能[^3]。 ### 定义方式 #### 实现HandlerInterceptor接口 一种常见的定义拦截器的方式是创建一个实现了`org.springframework.web.servlet.HandlerInterceptor`接口的新类。此接口提供了三个主要的方法: - `preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)`:该方法会在实际的处理器被调用之前调用;可以在此处做前置处理工作,比如身份认证等操作。当这个函数返回`true`时,则继续向下执行;反之则中断整个流程。 - `postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)`:这是在业务处理器处理请求完成之后,在解析视图之前执行。可以通过修改ModelAndView对象来改变模型数据或者试图名称。 - `afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)` :在整个请求结束以后才会被执行,通常用来释放资源等清理工作[^4]。 ```java public class MyCustomInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("Pre-handle method called"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Post-handle method called"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception { System.out.println("After-completion method called"); } } ``` #### 继承WebRequestInterceptor抽象类 除了直接实现上述接口外,还可以选择继承`WebRequestInterceptor`抽象类,并重写其两个具体的方法——`preHandle()` `postHandle()` 。这种方式适用于那些不需要访问到具体的HTTP Servlet API的情况[^5]。 ```java import org.springframework.web.context.request.WebRequest; public class CustomWebReqInterceptor extends WebRequestInterceptor { @Override public void preHandle(WebRequest webRequest){ // Pre-processing logic here... } @Override public void postHandle(WebRequest webRequest, ModelMap model){ // Post-processing logic here... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值