springboot 静态资源被自定义拦截器拦截

探讨了在SpringBoot 2.x中自定义拦截器可能误拦截静态资源的问题,分析了其与版本相关的根本原因,并提供了两种解决方案:一是通过配置文件映射静态资源路径并排除静态资源;二是直接排除特定目录下的资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己在写拦截器的时候遇见一个问题:
自定义的拦截器时不时会将自己的静态资源拦截

原因:这与springboot 的版本有关
springboot2.x 底层依赖的是spring 5 静态资源会被自定义的拦截器拦截,spring boot1.5 底层依赖的是spring 4,静态资源是不被拦截的
https://blog.youkuaiyun.com/ln1593570p/article/details/80607616 提供了详细的源码解释】

解决办法:1.在配置文件中配置静态资源的映射,在设置拦截的时候,排除静态资源

静态资源的默认路径:/**(不用加static),设置配置文件:spring.mvc.static-path-pattern=

2.或者排除asserts 目录下的资源:不拦截“/asserts/**”

### 如何配置 Spring Boot 的拦截器以避免拦截静态资源 在 Spring Boot 中,当配置自定义拦截器时,默认情况下所有的请求都会被拦截,这包括静态资源(如 CSS、JS 和 HTML 文件)。如果希望让这些静态资源不受拦截器的影响,则可以通过 `excludePathPatterns` 方法来实现。 以下是具体的解决方案: #### 解决方案描述 为了防止拦截器影响到静态资源的加载,可以将静态资源的相关路径添加到拦截器的排除列表中。具体来说,在重写 `addInterceptors` 方法时,调用 `excludePathPatterns` 并传入静态资源所在的路径模式[^2]。 以下是一个完整的代码示例: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 添加自定义拦截器并设置需要排除的路径 registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**") // 对所有路径生效 .excludePathPatterns( "/toLogin", "/login", "/css/**", "/js/**", "/images/**", "/fonts/**" ); // 排除特定路径以及静态资源目录 } } ``` 上述代码中的 `/css/**`, `/js/**`, `/images/**`, `/fonts/**` 是常见的静态资源路径模式。开发者可以根据实际项目的静态资源配置调整这些路径。 #### 修改前端引用路径 除了在后端配置拦截器外,还需要确保前端页面正确引用静态资源文件。通常情况下,Spring Boot 默认会在 `src/main/resources/static` 下寻找静态资源文件。因此,HTML 页面中的资源路径可能需要调整为相对于根路径的形式,并且建议在路径前加上 `/static/` 前缀[^1]。 例如: ```html <link href="/static/asserts/css/bootstrap.min.css" rel="stylesheet"> <script src="/static/asserts/js/Chart.min.js"></script> ``` 完成以上更改后,记得重新构建项目以使改动生效(可通过快捷键 Ctrl+F9 或其他方式执行构建操作)。 --- ### 注意事项 - **静态资源默认位置**:Spring Boot 默认会从 `src/main/resources/static` 目录读取静态资源文件。如果放置的位置不同,则需相应调整路径。 - **路径匹配规则**:`excludePathPatterns` 支持 Ant 风格的路径匹配语法,例如 `/**/*.css` 表示匹配任意子目录下的 `.css` 文件。 - **缓存问题**:某些浏览器可能会缓存旧版本的静态资源文件,导致更新后的文件未及时显示效果。此时可尝试清除浏览器缓存或强制刷新页面。 --- ### 总结 通过合理配置拦截器的排除路径和修正前端资源引用路径,能够有效解决因拦截器而导致的静态资源无法正常加载的问题。此方法已在多个场景下验证可行[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值