拦截器也是我们经常需要使用的,在SpringBoot中该如何配置呢?
在官方文档中有说明https://docs.spring.io/springboot/docs/2.1.3.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-auto-configuration
如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现`WebMvcConfigurer`,并且添加`@Configuration`注解,但是**千万不要**加`@EnableWebMvc`注解。如果你想要自定义`HandlerMapping`、`HandlerAdapter`、`ExceptionResolver`等组件,你可以创建一个`WebMvcRegistrationsAdapter`实例 来提供以上组件。
如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration
注解和@EnableWebMvc`注解
1.首先我们定义一个拦截器,需要实现HandlerInterceptor
接口
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("preHandle方法执行...");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.debug("postHandle方法执行...");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.debug("afterCompletion方法执行...");
}
}
2.添加配置类,注册拦截器
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
/**
* 重写接口中的addInterceptors方法,添加自定义拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/user/**")
.excludePathPatterns("/user/login"); // 这个地址的不拦截
}
}
3.添加login方法
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@GetMapping
public String get() {
log.debug("调用了get方法:" + System.currentTimeMillis());
return "您查询到了一个用户." + System.currentTimeMillis();
}
@GetMapping("/login")
public String login() {
return "success";
}
}