案例
在做登录案例的时候,自定义了一个登录拦截器。

public class LoginHandlerInterceptor implements HandlerInterceptor {
   
    /** * 目标方法执行之前 * @param request * @param response * @param handler * @return * @throws Exception */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
        Object user = request.getSession().getAttribute("loginUser");
        if(user == null){
   
            //未登录,拦截并返回登录页
            request.setAttribute("msg", "没有权限,请先登录");
            request.getRequestDispatcher("/index.html").forward(request, response);
            return false;
        }else {
   
            //已登录,放行
            return true;
        }
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
   
 
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
   
 
    }
}
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
   
    registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                        .excludePathPatterns("/index.html","/","","/user/login");
}
Spring Boot 1.x和2.x版本拦截器对于静态资源访问的区别!

<mark>Spring Boot 1.x版本:</mark>

  1. Spring Boot 1.x版本已经做好了静态资源映射,所以拦截器不会对.css、.js等静态资源进行拦截

<mark>Spring Boot 2.x版本:</mark>

  1. Spring Boot 2.x版本,如果按上述注册拦截器,那么静态资源也会被拦截!

解决方案

注册拦截器时,排除路径"/static/**"

 @Override
    public void addInterceptors(InterceptorRegistry registry) {
   
        //添加拦截器类
        registry.addInterceptor(loginHandlerInterceptor)
                //拦截要求
                .addPathPatterns("/**")
                //对哪些请求放行
                .excludePathPatterns("index.html","/","/login","/static/**");
    }