springboot拦截器静态资源
时间: 2023-11-03 19:00:31 浏览: 118
Spring Boot对静态资源的拦截器支持是通过WebMvcConfigurerAdapter类实现的。默认情况下,Spring Boot会自动配置静态资源的处理,并且提供了一组默认的静态资源映射规则。这些规则包括以下路径:
1. classpath:/META-INF/resources
2. classpath:/resources
3. classpath:/static
4. classpath:/public
如果你想自定义静态资源的映射规则,可以继承WebMvcConfigurerAdapter类,并覆盖其中的addResourceHandlers()方法。通过添加自定义的资源处理器和资源映射规则,你可以实现对静态资源的拦截器处理。
相关问题
springboot 拦截器 排除静态资源
### 配置Spring Boot中的拦截器以排除静态资源
在Spring Boot应用程序中,为了配置拦截器并确保其不应用于静态资源请求,可以采取特定措施来实现这一目标。通常情况下,静态资源放置于类路径下的`/static`, `/public`, `/resources`, 或者 `/META-INF/resources`目录中[^1]。
当定义自定义拦截器时,在`WebMvcConfigurer`接口的实现或者继承此类的一个类里重写方法`addInterceptors(InterceptorRegistry registry)`。在此过程中,通过指定要忽略的路径模式,能够有效地使这些路径免受拦截器的影响:
```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) {
// 注册自定义拦截器,并设置该拦截器应用到所有URL路径上,
// 同时指定了应被排除在外的具体路径前缀。
registry.addInterceptor(new MyCustomInterceptor())
.excludePathPatterns("/css/**", "/js/**", "/images/**");
}
}
```
上述代码片段展示了如何注册一个名为`MyCustomInterceptor`的拦截器实例至全局过滤链路之中;与此同时,利用`.excludePathPatterns()`函数声明了一系列不需要经过此拦截处理的静态文件夹路径匹配规则。这里列举的例子假设项目结构中有`/css`, `/js`, 和 `/images`作为存放样式表、JavaScript脚本以及图片素材的位置。
对于那些位于默认静态资源位置内的其他类型的文件同样适用相同的逻辑来进行排除操作。如果希望更加灵活地控制哪些资源应该避开拦截,则可以根据实际需求调整参数列表里的通配符表达式。
#### 关键点总结:
- 明确指出待排除的静态资源路径;
- 使用`excludePathPatterns()`方法完成对指定路径模式的豁免设定;
- 将配置集成进项目的整体MVC框架设置当中去。
springboot 拦截器不拦截静态资源
### 如何配置 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]。
---
阅读全文
相关推荐













