Spring Boot中拦截器的使用
/**
* @描述 测试拦截器
*/
public class TestHandlerInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(TestHandlerInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
String methodName = method.getName();
logger.info("====拦截到了方法:{},在该方法执行之前执行====", methodName);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.info("执行完方法之后进执行(Controller方法调用之后),但此时还没进行视图渲染");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.info("整个请求都处理完成,DispatcherServlet也渲染了对应的视图咯,此时可以做一些清理的工作");
}
}
/**
* @描述 测试拦截请求, 使用实现WebMvcConfigurer的方式默认不会拦截静态资源
*/
@Configuration
public class TestInterceptorConfiguration implements WebMvcConfigurer {
/**
* 添加拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TestHandlerInterceptor())
.addPathPatterns("/**");
}
}
使用继承WebMvcConfigurationSupport
类的方式需要添加静态资源映射规则
@Configuration
public class LoginInterceptorConfiguration extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/**")
super.addInterceptors(registry);
}
}
参考:https://gitchat.csdn.net/columnTopic/5b47fa3efa56195ed488acfc