版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014338530/article/details/86510568
之前记录了SpringBoot中使用过滤器,其实拦截器和过滤器从功能上来说,拦截器/过滤器所能实现的功能过滤器/拦截器都能够实现。但是过滤器是java实现的,它需要依赖于Servlet容器,而拦截器是SprignMVC实现的一个机制,独立于Servlet容器,而且能实现IOC容器中的各个bean。简单的说:过滤器的urlPattern针对的是所有的请求,而拦截器的urlPattern针对的SpringMVC中的Controller控制器处理的请求,并不会拦截Servlet容器。过滤器和拦截器触发时机不一样。
1、编写拦截器类MyHandlerInterceptor,实现HandlerInterceptor接口
public class MyHandlerInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(MyHandlerInterceptor.class);
long start;
@Override
//请求执行前执行
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
logger.info("preHandle starter");
start = System.currentTimeMillis();
return true;
}
@Override
/**
* 视图渲染完成后行
* 但必须是preHandle()返回为true时才执行
*/
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
logger.info("preHandle end");
logger.info("time:"+(System.currentTimeMillis()-start));
}
@Override
/**
* 请求结束执行
* 但必须是preHandle()返回为true时才执行
*/
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
2、编写config类
@Configuration
public class InterConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/hello");
super.addInterceptors(registry);
}
}
3、编写controller类进行测试
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "hello123!";
}
4、页面请求hello请求,查看控制台打印结果
这里,基本上拦截器的配置就算是成功了,本人小白一枚,还在学习...