适配器类的好处是不用每个方法都去实现,而接口是必须实现
- public class OpenInterceptor extends HandlerInterceptorAdapter {
-
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- return true;
- }
-
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
- }
-
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
- }
-
- }
配置类需要实现:org.springframework.web.servlet.config.annotation.WebMvcConfigurer
- @Configuration
- public class CustomWebMvcConfigurer implements WebMvcConfigurer {
-
- @Autowired
- private OpenInterceptor OpenInterceptor;
-
- // 添加拦截器
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- WebMvcConfigurer.super.addInterceptors(registry);
-
- // /v1/open下的接口都要走拦截器,除了/oauth开头的方法
- registry.addInterceptor(bgOpenInterceptor)
- .addPathPatterns("/v1/open/**")
- .excludePathPatterns("/v1/open/oauth/**");
- }
- }
1、根据当前请求,找到HandlerExecutionChain【可以处理请求的handler以及handler的所有 拦截器】
2、先来顺序执行 所有拦截器的 preHandle方法
● 如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle
● 如果当前拦截器返回为false。直接 倒序执行所有已经执行了的拦截器的 afterCompletion;
3、如果任何一个拦截器返回false。直接跳出不执行目标方法
4、所有拦截器都返回True。执行目标方法
5、倒序执行所有拦截器的postHandle方法。
6、前面的步骤有任何异常都会直接倒序触发 afterCompletion
7、页面成功渲染完成以后,也会倒序触发 afterCompletion

注:web模式下,springBoot增加自定义配置类,都是实现WebMvcConfigurer,具体可以添加哪种配置,就实现哪个方法即可
- public interface WebMvcConfigurer {
- default void configurePathMatch(PathMatchConfigurer configurer) {
- }
-
- default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
- }
-
- default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
- }
-
- default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
- }
-
- default void addFormatters(FormatterRegistry registry) {
- }
-
- default void addInterceptors(InterceptorRegistry registry) {
- }
-
- default void addResourceHandlers(ResourceHandlerRegistry registry) {
- }
-
- default void addCorsMappings(CorsRegistry registry) {
- }
-
- default void addViewControllers(ViewControllerRegistry registry) {
- }
-
- default void configureViewResolvers(ViewResolverRegistry registry) {
- }
-
- default void addArgumentResolvers(List
resolvers) { - }
-
- default void addReturnValueHandlers(List
handlers) { - }
-
- default void configureMessageConverters(List
> converters) { - }
-
- default void extendMessageConverters(List
> converters) { - }
-
- default void configureHandlerExceptionResolvers(List
resolvers) { - }
-
- default void extendHandlerExceptionResolvers(List
resolvers) { - }
-
- @Nullable
- default Validator getValidator() {
- return null;
- }
-
- @Nullable
- default MessageCodesResolver getMessageCodesResolver() {
- return null;
- }
- }