拦截器
两个步骤:
- 实现HandlerInterceptor接口创建拦截器
转载自:https://blog.csdn.net/weixin_41767154/article/details/84648873public class LoginInterceptor implements HandlerInterceptor { /** * 发送请求之前执行 * * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //true代表放行,false代表拦截 return false; } /** * 发送请求完成后执行 * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行 * * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 整个请求完成之后执行,也就是DispatcherServlet渲染了视图执行(此方法用于清理资源) * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。 * * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
- 实现WebMvcConfigurer接口配置拦截器(不要拦截静态资源)
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //添加自己写的拦截器,拦截路径为(/**),静态资源放行路径为(/css/**) registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") .excludePathPatterns("/css/**"); } }
注意点:
拦截器中方法的执行顺序是 preHandle -> Controller -> postHandle ->
afterCompletion只有 preHandle返回true,才会执行后面的方法
拦截器的执行过程: