在Spring Boot中使用HandlerInterceptor的步驟如下:
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在請求處理之前進行調(diào)用(Controller方法調(diào)用之前)
return true; // 返回true表示繼續(xù)執(zhí)行后續(xù)的攔截器和Controller方法,返回false表示終止執(zhí)行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 請求處理之后進行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 整個請求處理完畢后進行調(diào)用,即在視圖渲染完畢或者調(diào)用方已經(jīng)拿到響應(yīng)數(shù)據(jù)之后
}
}
在配置類上添加@EnableWebMvc注解,開啟Spring MVC的配置。
創(chuàng)建一個繼承WebMvcConfigurerAdapter的配置類,并重寫addInterceptors方法。在該方法中添加自定義的攔截器。
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**"); // 添加攔截路徑
}
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Configuration
@EnableWebMvc
public static class WebMvcConfig extends WebMvcConfigurerAdapter {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
}
這樣就完成了HandlerInterceptor的配置和使用。自定義的攔截器會在請求處理前、請求處理后和整個請求處理完畢后進行調(diào)用??梢栽跀r截器中添加一些自定義的邏輯,例如身份驗證、日志記錄等。