拦截器Interceptor
Interceptor(拦截器)是一种动态拦截方法调用的机制,类似于过滤器。拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。
拦截器的作用:拦截请求,在指定方法调用前后,根据业务需要执行预先设定的代码。
定义拦截器
1、实现HandlerInterceptor接口,并重写其所有方法
//自定义拦截器
@Component
public class DemoInterceptor implements HandlerInterceptor {
//目标资源方法执行前执行。 返回true:放行 返回false:不放行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle .... ");
return true; //true表示放行
}
//目标资源方法执行后执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle ... ");
}
//视图渲染完毕后执行,最后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion .... ");
}
}
2、注册配置拦截器
在 com.itheima下创建一个包,然后创建一个配置类 WebConfig, 实现 WebMvcConfigurer 接口,并重写 addInterceptors 方法
@Configuration
public class WebConfig implements WebMvcConfigurer {
//自定义的拦截器对象
@Autowired
private DemoInterceptor demoInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册自定义拦截器对象
registry.addInterceptor(demoInterceptor).addPathPatterns("/**");//设置拦截器拦截的请求路径( /** 表示拦截所有请求)
}
}
3、常见拦截路径设置
拦截路径 含义
3.1: /* ,这表示一级路径 能匹配/depts,/emps,/login,不能匹配 /depts/1
3.2:/,这表示任意级路径 能匹配/depts,/depts/1,/depts/1/2
3.3:/depts/*,这表示 /depts下的一级路径 能匹配/depts/1,不能匹配/depts/1/2,/depts
3.4:/depts/,这表示/depts下的任意级路径 能匹配/depts,/depts/1,/depts/1/2,不能匹配/emps/1

浙公网安备 33010602011771号