Interceptor(拦截器)详解
Posted 123早点睡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Interceptor(拦截器)详解相关的知识,希望对你有一定的参考价值。
拦截器类似与Servlet中的过滤器,主要用于拦截客户请求并作出相应的处理,与过滤器有如下区别:
过滤器只能在容器初始化时被调用一次;在action的生命周期中,拦截器可以被调用多次;
过滤器几乎可以对所有的请求起作用,拦截器只能对action起作用;
过滤器不能访问action上下文,值栈里的对象,而拦截器可以;
过滤器依赖于servlet容器,而拦截器不依赖servlet容器;
过滤器是基于函数回调的,而拦截器是基于Java反射机制;
过滤器不能获取IOC容器中的各个bean,而拦截器可以,在拦截器里注入一个service,可以调用业务逻辑
拦截器特点:
请求到达经过拦截器,相应回来也经过拦截器
只能拦截控制器相关请求,不能拦截JSP请求
拦截器可以中断用户的请求轨迹
拦截器的作用:
将多个控制器中共有的代码放入拦截器可以减少控制器代码的冗余
@Component
public class InterceptorDemo implements HandlerInterceptor
//请求之前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception
System.out.println("请求之前执行");
return true;
//请求之后执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception
System.out.println("请求之后执行");
//响应之后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
System.out.println("响应之后执行");
@Configuration
public class InterceporConfig implements WebMvcConfigurer
@Autowired
private InterceptorDemo interceptorDemo;
@Override
public void addInterceptors(InterceptorRegistry registry)
registry.addInterceptor(interceptorDemo)
.addPathPatterns("/test/login")//拦截的路径
.excludePathPatterns("/test/visit");//不拦截的路径
@RestController
@RequestMapping("/test")
public class TestController
@GetMapping("login")
public void login()
System.out.println("被拦截的路径---login---");
@GetMapping("visit")
public void visit()
System.out.println("不拦截的路径---visit---");
以上是关于Interceptor(拦截器)详解的主要内容,如果未能解决你的问题,请参考以下文章