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"); //不拦截的路径
    }
}

 

posted on 2022-08-17 10:05  ziwang520  阅读(382)  评论(0编辑  收藏  举报