1-6 Springboot拦截器 Interceptor 通过重写addInterceptors方法添加一个HandlerInterceptor对象

Filter 和 Interceptor 分别对应 过滤器和拦截器

应用场景:拦截器 做令牌检查、参数校验等等

实现方法:1、通过实现 WebMvcConfigurer 接口 重写其中空的  addInterceptors(InterceptorRegistry registry)方法

                  2、调用 registry.addInterceptor(HandlerInterceptor对象)..addPathPatterns("/url")

执行顺序:先过滤后拦截

自定义类实现WebMvcConfigurer重写其中的addInterceptors 方法

package com.example.ribi.interceptor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Component
public class Interceptor implements WebMvcConfigurer {
    //自定义
    @Autowired
    TokenInterceptor tokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor).addPathPatterns("/**");
    }
}

自定义的TokenInterceptor

package com.example.ribi.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class TokenInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("进入拦截器");
        //检查
        if(request.getRequestURI().equalsIgnoreCase("/user/testInterceptor")){
            System.out.println(request.getRequestURI()+" : 通过检查");
            return true;
        }else {
            System.out.println(request.getRequestURI()+" : 未能通过检查");
            return false;
        }
    }

}

Controller

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @Autowired
    HttpServletRequest httpServletRequest;

    @GetMapping("/testInterceptor")
    @ResponseBody
    public int testInterceptor(){
        System.out.println("进入testInterceptor");
        return 1;
    }

    @GetMapping("/return")
    @ResponseBody
    public String testReturn(){
        System.out.println("进入testReturn");
        return "return";
    }
    
}

Postman测试

1、localhost:8080/user/testInterceptor 通过 打印进入testInterceptor

进入过滤器
进入拦截器
/user/testInterceptor : 通过检查
进入testInterceptor

2、localhost:8080/user/testReturn 未通过 未打印进入testReturn

进入过滤器
进入拦截器
/user/testReturn : 未能通过检查

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值