spring boot 2.0 + 静态资源被拦截,怎么办?
问题描述:使用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 + 静态资源被拦截,怎么办?的更多相关文章
- 【spring boot】7.静态资源和拦截器处理 以及继承WebMvcConfigurerAdapter类进行更多自定义配置
开头是鸡蛋,后面全靠编!!! ======================================================== 1.默认静态资源映射路径以及优先顺序 Spring B ...
- Spring Boot 中的静态资源到底要放在哪里?
当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥Spring Boot 中的静态资源加载问题:"松哥,我的HTML页面好像没有样式?& ...
- Spring Boot中的静态资源文件
Spring Boot中的静态资源文件 1.SSM中的配置 2.Spring Boot 中的配置 2.1 整体规划 2.2 源码解读 2.3 自定义配置 2.3.1 application.prope ...
- Spring Boot实战:静态资源处理
前两章我们分享了Spring boot对Restful 的支持,不过Restful的接口通常仅仅返回数据.而做web开发的时候,我们往往会有很多静态资源,如html.图片.css等.那如何向前端返回静 ...
- spring boot 2.x静态资源会被HandlerInterceptor拦截的原因和解决方法
在spring boot 1.5.x中,resources/static目录下的静态资源可以直接访问,并且访问路径上不用带static,比如静态资源放置位置如下图所示: 那么访问静态资源的路径可以是: ...
- Spring Boot2.0 静态资源被拦截问题
在Spring Boot2.0+的版本中,只要用户自定义了拦截器,则静态资源会被拦截.但是在spring1.0+的版本中,是不会拦截静态资源的. 因此,在使用Spring Boot2.0+时,配置拦截 ...
- spring boot默认访问静态资源
演示spring boot默认可以直接访问静态资源的2种方法: 第一种:在src/main/resources资源目录下创建一个名为"static"的文件夹(该文件夹的名称是规定死 ...
- (4)Spring Boot Web开发---静态资源
文章目录 对静态资源的映射规则 模板引擎 Thymeleaf 使用 & 语法 使用之前将的快速创建项目的方法,勾选我们需要的场景,这里我需要 web --> web.sql --> ...
- spring boot 配置虚拟静态资源文件
我们实现的目的是:通过spring boot 配置静态资源访问的虚拟路径,可实现在服务器,或者在本地通过:http://ip地址:端口/资源路径/文件名 ,可直接访问文件 比如:我们本地电脑的:E: ...
随机推荐
- Java8函数接口实现回调及Groovy闭包的代码示例
本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场景: 主体流程是不变的,变的只是其中要调用的具体方法. 其特征是: Begi ...
- python sys.stdin、sys.stdout和sys.stderr
学习并转载自 https://www.cnblogs.com/guyuyuan/p/6885448.html 标准输入:一般是键盘.stdin对象为解释器提供输入字符流,一般使用raw_input( ...
- 20165207 2017-2018-2《Java程序设计》课程总结
20165207 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:学习基础与C语言调查反馈 预备作业3:Linux安装与命令 ...
- pbs 作业管理命令
PBS 提供4 条命令用于作业管理. (1) qsub 命令—用于提交作业脚本 命令格式: qsub [-a date_time] [-c interval] [-C directive_prefix ...
- 如何加固linux NFS 服务安全的方法
NFS(Network File System)是 FreeBSD 支持的一种文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源.不正确的配置和使用 NFS,会带来安全问题. 概述 N ...
- 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究
20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...
- 20145310《网络对抗技术》Exp6 信息搜集技术
实验内容 本次实验的目标是掌握信息搜集的最基础技能.具体有 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 ( ...
- SQLException: com.mchange.v2.c3p0.ComboPooledDataSource [ java.beans.IntrospectionException: java.lang.reflect.InvocationTargetException [numThreadsAwaitingCheckoutDefaultUser] ] has been closed()
问题:Could not get JDBC Connection; nested exception is java.sql.SQLException: com.mchange.v2.c3p0.Com ...
- Git基础 —— Github 的使用
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 Github 的利用 Gith ...
- 51nod 1106 质数检测
#include <bits/stdc++.h> using namespace std; int n; ; bool s[maxn]; void is_prime() { memset( ...