SpringBoot拦截器拦截静态资源问题

本文介绍如何在SpringBoot 2.0+版本中正确配置拦截器,避免静态资源如css和js被拦截。通过示例代码展示如何排除特定路径和静态资源文件夹,确保应用程序正常运行。

使用springboot2.0+的版本建立拦截器拦截访问时,发现将静态的css/js资源也拦截了。此时需要在拦截器中配置放行资源。直接上代码

 //设置拦截,释放静态文件
       registry.addInterceptor(new LoginHandlerInterceptero()).addPathPatterns("/**")
               .excludePathPatterns("/user/login","/login.html","/css/**","/js/**");

放行"/css/**"资源。
有些使用放行static文件夹来放行所有的静态资源,不过SpringBoot默认扫描static包下的静态资源,所以好像不管用。

下图是一次项目中配置的静态资源释放,在这里插入图片描述对文件结构不是很清楚,所以直接配置释放所有文件。

### 如何配置 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]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值