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

    xiaoxiao2022-07-06  146

    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 : 未能通过检查

     

    最新回复(0)