之前使用xml的方式来配置拦截器,现在使用配置类的方式来注册拦截器。
1.首先定义拦截器
package org.javaboy.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//定义拦截器
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletio");
}
}
拦截器中定义的三个方法分别是拦截前,拦截时,拦截后。现在分别在这三个方法中打印语句以便于观察拦截器是否生效。
2.定义好拦截器之后现在来配置拦截器
package org.javaboy.interceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//配置拦截器
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//这里拦截所有的路径
registry.addInterceptor(myInterceptor()).addPathPatterns("/**");
}
//拿到拦截器的bean
@Bean
public MyInterceptor myInterceptor() {
return new MyInterceptor();
}
}
配置的时候先要在类前加上注解@Configuration,代表这是一个配置类。然后通过@Bean将定义好的拦截器取到。最后通过addInterceptors方法添加拦截路径,registry.addInterceptor(myInterceptor())后有许多方法:比如添加拦截路径,配置优先级等等…这里/**是将所有路径都拦截。
4.定义controller进行测试拦截器是否生效
package org.javaboy.interceptor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
控制台打印的结果:
拦截器注册生效了。