springboot 自定义拦截器的定义与配置

1、定义拦截器

@Component
public class MyIntercepter implements HandlerInterceptor {
    private static Logger logger = LoggerFactory.getLogger(MyIntercepter.class);

    // 该方法的执行时机是,当某个 url 已经匹配到对应的 Controller 中的某个方法,且在这个方法执行之前。
    @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; //返回true才会继续执行下一步
    }

    // 该方法的执行时机是,当某个 url 已经匹配到对应的 Controller 中的某个方法,且在执行完了该方法,但是在 DispatcherServlet 视图渲染之前。
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        logger.info("执行完方法之后进执行(Controller方法调用之后),但是此时还没进行视图渲染");

    }

    // 顾名思义,该方法是在整个请求处理完成后(包括视图渲染)执行,这时做一些资源的清理工作,这个方法只有在 `preHandle(……)` 被成功执行后并且返回 true 才会被执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        logger.info("整个请求都处理完咯,DispatcherServlet也渲染了对应的视图咯,此时我可以做一些清理的工作了");
    }
}

2、配置拦截器

@Configuration
public class MyInterceptorConfig extends WebMvcConfigurationSupport {
    @Autowired
    MyIntercepter myIntercepter;

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myIntercepter).addPathPatterns("/**");
        super.addInterceptors(registry);
    }
    **
     * 用来指定静态资源不被拦截,否则继承WebMvcConfigurationSupport这种方式会导致静态资源无法            直接访问
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
}

}

3、测试controller

@Controller
@RequestMapping("/page")
public class IndexController {
    @RequestMapping("/index")
    public String test() {
        return "index";
    }
}

4、输出结果

springboot 自定义拦截器的定义与配置_第1张图片

 

你可能感兴趣的:(java,java,html)