问题描述:使用springboot 2.0后,按照springboot 1.5版本(以下简称旧版)的方式去配置项目。结果发现静态资源访问不到了,本文对此情况分析、处理

项目结构:

  • 直接上图

如果是在旧版,需要访问下图静态资源,

地址应该为: localhost:8080/admin/js/base.js

原因在于:META-INF/resources / resources / static / public 都是spring boot 认为静态资源应该放置的位置,会自动去寻找静态资源

然而,在2.0之后 就发生了变化。

先看本文的基础,拦截器

BaseInterceptor

  • 毫无疑问,需要定义一个类:BaseInterceptor 应实现 HandlerInterceptor

  • 在其 preHandle中 需要重写,自定义拦截配置,大概如下图:

  • 作用:拦截没有登录,并试图知己访问后台的地址的操作。

再看本文的关键,WebMvcConfig

  • 此类需要实现 WebMvcConfigurer

  • 在旧版中,一般继承 WebMvcConfigurerAdapter类,但由于2.0后,WebMvcConfigurer 接口中定义了很多default方法(基于jdk1.8+ )

  • WebMvcConfigurer中配置如下:

  • 注意:需要在重写的第二个方法中,添加静态资源路径,这是能否被识别的关键

@Component
public class WebMvcConfig implements WebMvcConfigurer {
@Resource
private BaseInterceptor baseInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(baseInterceptor)
//需要配置2:----------- 告知拦截器:/static/admin/** 与 /static/user/** 不需要拦截 (配置的是 路径)
.excludePathPatterns("/static/admin/**", "/static/user/**");
} /**
* 添加静态资源文件,外部可以直接访问地址
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//其他静态资源,与本文关系不大
registry.addResourceHandler("/upload/**").addResourceLocations("file:"+ TaleUtils.getUplodFilePath()+"upload/"); //需要配置1:----------- 需要告知系统,这是要被当成静态文件的!
//第一个方法设置访问路径前缀,第二个方法设置资源路径
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
} @Override
public void addViewControllers(ViewControllerRegistry registry) {
//registry.addViewController("/error/404").setViewName("/admin/page_error/error_404.html");
}
}

按照如上配置

  • 访问:http://localhost:9090/static/admin/js/base.js,即可正常访问到。
  • 也就是在html文件中,不要像之前一样,/admin/js/base.js 而应该在前方加上addResourceHandlers中配置的名字

之前谁在拦截静态资源?

  • 可以在aseInterceptor 中的 preHandle() 方法体内打断点,会发现访问static下的静态资源时候会进入此方法。
  • 也就是被其当做正常的访问路径去识别。导致无法正常加载。
  • 换句话说,也就是配置的不完整,导致静态资源没有被识别。

还可以参考

https://my.oschina.net/dengfuwei/blog/1795346

  • WebMvcConfig addInterceptors方法中,添加排除路径;
  • 但是尴尬的是,我copy的项目结构不太一样,static/template下方都有 admin文件夹,并且登录访问还是admin开始
  • 如果排除静态资源的话,那些需要跳转的html也被排除了 。

18-5-23日更新

  • 原文中的配置还是有问题!
  • 还是应该在 WebMvcConfig 中的 addInterceptors 排除路径,原来虽然能访问到静态资源,但是还是被拦截器中的 preHandle拦截!
  • 所以还是应该配置排除拦截的路径,上方 WebMvcConfig类中内容已更改~

18-7-31日更新

  • 仅供参考。等搞清楚再来更新。

spring boot 2.0 + 静态资源被拦截,怎么办?的更多相关文章

  1. 【spring boot】7.静态资源和拦截器处理 以及继承WebMvcConfigurerAdapter类进行更多自定义配置

    开头是鸡蛋,后面全靠编!!! ========================================================  1.默认静态资源映射路径以及优先顺序 Spring B ...

  2. Spring Boot 中的静态资源到底要放在哪里?

    当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥Spring Boot 中的静态资源加载问题:"松哥,我的HTML页面好像没有样式?& ...

  3. Spring Boot中的静态资源文件

    Spring Boot中的静态资源文件 1.SSM中的配置 2.Spring Boot 中的配置 2.1 整体规划 2.2 源码解读 2.3 自定义配置 2.3.1 application.prope ...

  4. Spring Boot实战:静态资源处理

    前两章我们分享了Spring boot对Restful 的支持,不过Restful的接口通常仅仅返回数据.而做web开发的时候,我们往往会有很多静态资源,如html.图片.css等.那如何向前端返回静 ...

  5. spring boot 2.x静态资源会被HandlerInterceptor拦截的原因和解决方法

    在spring boot 1.5.x中,resources/static目录下的静态资源可以直接访问,并且访问路径上不用带static,比如静态资源放置位置如下图所示: 那么访问静态资源的路径可以是: ...

  6. Spring Boot2.0 静态资源被拦截问题

    在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截.但是在spring1.0+的版本中,是不会拦截静态资源的. 因此,在使用Spring Boot2.0+时,配置拦截 ...

  7. spring boot默认访问静态资源

    演示spring boot默认可以直接访问静态资源的2种方法: 第一种:在src/main/resources资源目录下创建一个名为"static"的文件夹(该文件夹的名称是规定死 ...

  8. (4)Spring Boot Web开发---静态资源

    文章目录 对静态资源的映射规则 模板引擎 Thymeleaf 使用 & 语法 使用之前将的快速创建项目的方法,勾选我们需要的场景,这里我需要 web --> web.sql --> ...

  9. spring boot 配置虚拟静态资源文件

    我们实现的目的是:通过spring boot 配置静态资源访问的虚拟路径,可实现在服务器,或者在本地通过:http://ip地址:端口/资源路径/文件名  ,可直接访问文件 比如:我们本地电脑的:E: ...

随机推荐

  1. 209. Minimum Size Subarray Sum(双指针)

    Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...

  2. Rpgmakermv(4 )doc of TerraxLights

    我只做简要翻译. To activate the script in an area, do the following: 1. Put an event switch into the map. 2 ...

  3. 线段树(I tree)

    Codeforces Round #254 (Div. 2)E题这题说的是给了一个一段连续的区间每个区间有一种颜色然后一个彩笔从L画到R每个区间的颜色都发生了 改变然后 在L和R这部分区间里所用的颜色 ...

  4. 【Redis学习之九】Redis集群:Twemproxy和HA

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 redis-3.0.4 主从模式对写压力没有分担,解决思路就 ...

  5. 2018-2019-2 20165209 《网络对抗技术》Exp5:MSF基础应用

    2018-2019-2 20165209 <网络对抗技术>Exp5:MSF基础应用 目录 一.基础问题回答和实验内容 二.攻击实例 主动攻击的实践 ms08_067 payload/gen ...

  6. mysql创建外链失败1005错误解决方法

    mysql创建外链失败1005错误解决方法 错误号:1005错误信息:Can't create table 'webDB.#sql-397_61df' (errno: 150)解决方法 错误原因有四: ...

  7. 将图片文件转化为字节数组字符串,并对其进行Base64编码处理,以及对字节数组字符串进行Base64解码并生成图片

    实际开发中涉及图片上传并且量比较大的时候一般处理方式有三种 1.直接保存到项目中 最老土直接方法,也是最不适用的方法,量大对后期部署很不方便 2.直接保存到指定路径的服务器上.需要时候在获取,这种方式 ...

  8. ELK+Kafka学习笔记之搭建ELK+Kafka日志收集系统集群

    0x00 概述 关于如何搭建ELK部分,请参考这篇文章,https://www.cnblogs.com/JetpropelledSnake/p/9893566.html. 该篇用户为非root,使用用 ...

  9. SQL学习之简单增删改查

    SQL最常用的语句,就是增删改查: 增删改查的对象,分别是库(文件夹),表(文件),表的内容(表的记录): 一.创建一个基本的表 #create table Student_Info (Name VA ...

  10. HTML 语义化标签-新增标签介绍

    HTML 基础知识 版权声明:未经博主授权,内容严禁转载 ! HTML语义化标签概念 如果没有语义化标签,上面这些 div 都是没有实际意义的,只是我们提供给浏览器的指令. 和 语义化 代码对比: 什 ...