拦截器实现
- 实现
HandlerInterceptor
- 继承
HandlerInterceptorAdapter
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截之前调用");
String reqUri = request.getRequestURI();
System.out.println(reqUri + "--接口被MyInterceptor拦截了");
System.out.println(handler);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截之后调用");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("整个流程结束调用");
}
}
重写一下三个方法
preHandle
拦截之前调用
postHandle
拦截之后调用
afterCompletion
整个流程结束调用
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Value("${open.url}")
private String openUrl;
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor()).addPathPatterns("/api/**").excludePathPatterns(openUrl);
}
}
该代码用于配置拦截策略,需重写addInterceptors方法
addPathPatterns
需要拦截的路径
excludePathPatterns
放行路径
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
若此处不使用@Bean的情况下,可使用@Component注解标注拦截器,InterceptorConfig 配置中使用@Autowired注入
eg:
@Component
public class MyInterceptor implements HandlerInterceptor
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;