概述
- 概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行
- 作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。
Interceptor快速入门
1.定义拦截器,实现HandlerInterceptor接口,并重写其所有方法.
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
//目标资源方法执行前执行,放回true:放行,返回false:不放行
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
return true;
}
//目标资源方法执行后执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
//视图渲染完毕后执行,最后执行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
2.注册拦截器
@Configuration
public class interceptorConfig implements WebMvcConfigurer {
@Autowired
private LoginCheckInterceptor loginCheckInterceptor;
// 添加拦截器
public void addInterceptors(InterceptorRegistry registry) {
//添加拦截地址,拦截所有路径,排除/login
registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
}
}
Interceptor拦截路径
拦截路径 | 含义 | 举例 |
---|---|---|
/* | 一级路径 | 能匹配/depts,/emps,/login,不能匹配 /depts/1 |
/** | 任意级路径 | 能匹配/depts, /depts/1, /depts/1/2 |
/depts/* | /depts下的一级路径 | 能匹配/depts/1,不能匹配/depts/1/2,/depts |
/depts/** | /depts下的任意级路径 | 能匹配/depts,/depts/1,/depts/1/2,不能匹配/emps/1 |
Interceptor拦截器执行流程
标签:拦截器,匹配,depts,public,Interceptor,拦截 From: https://blog.csdn.net/qq_52848267/article/details/142286575Filter与Interceptor的不同
- 接口规范不同:过滤器需要实现Filter接口而拦截器需要实现HandlerInterceptor接口。
- 拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截Spring环境中的资源。