一,拦截器是什么
拦截器也是spring框架的核心功能,主要用于拦截用户的请求,也要根据业务执行预先设定的代码。也就是定义逻辑,允许有些请求在响应完了就执行,有些直接不执行拦截住。
也就是比如强制登陆这里,你可以设置如果有登陆信息就放行,没有就拦截住。
也就是这一套:
二,拦截器的基本使用
拦截器的使用步骤分两步执行:
1,定义拦截器
2,注册配置拦截器
2.1自定义拦截器
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler) throws Exception {
log.info("LoginInterceptor ⽬标⽅法执⾏前执⾏..");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("LoginInterceptor ⽬标⽅法执⾏后执⾏");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.info("LoginInterceptor 视图渲染完毕后执⾏,最后执⾏");
}
}
preHandle()方法:在目标执行前执行,如果返回true,则继续执行,如果返回false,则中断执行。
postHandle()方法:目标方法执行后执行。
2.2注册配置拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
//⾃定义的拦截器对象
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册⾃定义拦截器对象
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**");//设置拦截器拦截的请求路径( /** 表⽰拦截所有请求)
.excludePathPatterns("/user/login");
}
}
这边说一下拦截器的路径配置,也就是我们使用注册配置拦截器的时候,通过addPathPatterns方法指定要拦截那些那些请求,excludePathPatterns方法指定那些请求不拦截。
2.3拦截路径
除了上述的拦截路径之外,还有这些常见的拦截路径:
三,拦截器执行流程
一般正常的调用顺序也就是用户->控制器层->服务层->数据持久层-> 数据库:
但加入拦截器之后,就会在用户和后端程序这边多一道工序:
也就是上面说的,请求之后执行方法,如果返回true,则继续执行,返回false,则直接停止。
当全部执行完了之后,在回来一次,执行在程序结束执行的方法,最终给浏览器响应。