springboot2.0+启动后网页一直找不到静态文件

起因

一开始我按照视频教程自作了登录页面的拦截器;

 //目标方法执行之前
    @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;
        }
    }

然后在为了在容器中注册一个拦截器,我在我自己的springboot配置类中配置了自己WebMvcConfigurer;
这也是噩梦的开始

  //注册拦截器
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                //静态资源:*.css,*.js
                //springboot已经做好了静态资源的映射
                registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                        .excludePathPatterns("/index.html","/","/user/login");
            }

第一天我创建好拦截器一切都是正常可以访问的,静态资源也没有被拦截,css和webjar都是可以访问到的,但是第二天我打开idea继续学习时,我想登陆后从主页面跳转到一个列表页面然后从数据库 其实是一个Collection数组 里取出列表并且返回到视图中

//查询所有员工返回列表页面
    @GetMapping("/emps")
    public String list(Model model) {
        Collection<Employee> employees = employeeDao.getAll();
        //放在请求域中共享
        model.addAttribute("emps",employees);
        //thymeleaf默认就会拼串
        //classpath:/templates/   .html
        return "emp/list";
    }

但是当我测试页面跳转的时候,我突然发现我的登录页面不正常了,看了一下f12的报错,应该是找不到了静态文件像css之类的,如下图:
在这里插入图片描述
这是今天的状况,昨天的状况是不仅webjar找不到连static静态文件夹下面的css样式也找不到,然后我去网上查找相关官方文档和网友的一些解决方案,最后我总结的结果是springboot2.0+和1.0+的静态资源管理是由些许差别的,但是这也是网友的说法,我看文档和源码是没有任何区别的。因为springboot默认的扫描路径是 /**,我拦截器拦截的也是 /** ,所以我试着改了一下配置文件添加了如下一段话,修改了静态资源的扫描路径:

spring.mvc.static-path-pattern=/resources/**

然后页面就可以正常访问了,所有功能就可以使用了,我也就没放在心上,但是直到今天,我打开idea学习的时候,我再次启动又出现了了同样的状况,但是这次的情况是webjar找不到,但是css是照常加载,为了更好的理解,请看图:
springboot2.0+启动后网页一直找不到静态文件_第1张图片
springboot2.0+启动后网页一直找不到静态文件_第2张图片
这是css的获取,是可以获取到的但是大家看bootstrap
springboot2.0+启动后网页一直找不到静态文件_第3张图片
可以明显看到这个不是bootstrap的源码,其实这是我登录页面的源码,也就是说我的bootstrap又被我的拦截器拦截了,截止到我写这个博客为止,我还是没有找到解决的方法。但是后续有我肯定会继续跟进。


现在是2019年9月23日
问题出现了变化,虽然还是2.+和1.+的写法问题
但是导致问题的出现的原因是因为,在2.0里你创建的拦截器优先级很高,比静态资源的拦截器要高很多,所以才会导致你的拦截器会把静态资源路径拦截,所以才会出现找不到资源或者资源被拦截的情况
就是以后在啊写拦截器的时候要注意,加上要访问的静态资源的路径

 //注册拦截器
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                //静态资源:*.css,*.js
                //springboot已经做好了静态资源的映射
                registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                        .excludePathPatterns("/index.html","/","/user/login","/resources/**","/webjars/**","/asserts/**");
            }

所以才会导致,像之前一样的状况,望各位小心自己。

原代码之神保佑我!

你可能感兴趣的:(springboot2.0+启动后网页一直找不到静态文件)