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