Spring Boot 拦截器 用法
拦截器 一般用于拦截动态资源的后台请求 使用场景比较多的是判断用户是否有权限请求后台
定义拦截器,只需要实现 HandlerInterceptor 接口, 该接口中有三个方法
preHandle(……) 拦截后进入这个方法 根据业务来决定是否放行 返回 true 则放行,返回 false 则不会向后执行
postHandle(……)执行完controller的方法后 在 DispatcherServlet 视图渲染之前。方法中有个 ModelAndView 参数,可以在此做一些修改动作
afterCompletion(……) 该方法是在整个请求处理完成后(包括视图渲染)执行,这时做一些资源的清理工作,这个方法只有在 preHandle(……) 被成功执行后并且返回 true才会被执行。
步骤1 首先定义一个拦截类 建一个类 实现HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor { private Logger logger = LoggerFactory.getLogger(MyInterceptor.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);
//这里可以获取很多东西 还可以获取路径 //拦截住的方法会到这里 这里写业务 如果放行返回true 不放行返回false return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { logger.info("方法被执行,但是视图还未渲染"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { logger.info("方法执行完毕,进行资源清理"); } }
步骤2 写一个配置类 在配置类中实现WebMvcConfigurer 进行拦截路径
@Configuration public class MyInterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) //可以把配置类加入bean 然后autowier得到 或者@Bean 返回值得到 JavaConfig 三种方法都可以 .addPathPatterns("/**") //拦截的路径 **代表所有 .excludePathPatterns("/adminUser/login"); //不拦截的路径 } }