问题描述:在SpringBoot中自定义拦截器Interceptor时,发现当preHandler返回值为true时,有些请求的preHandler方法被执行两次。后来通过在代码中输出请求路径找到了原因。拦截器实现、拦截器注册以及处理器的代码如下:
//通过实现HandlerInterceptor接口实现拦截,这个类需要注册
public class InterceptorByInterface implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("此路是我开,此树是我栽,要想从此过,留下买路财");
//输出请求路径
System.out.println(request.getRequestURI());
//true表示请求放行,false表示拦截请求,不再向下寻找处理器
return true;
}
}
//注册拦截器的配置类
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// /**表示拦截所有请求
String[] addPath = {"/**"};
// 放行getStudent和getUser两个请求:其中getUser请求没有对应的处理器