在Spring Boot应用中,静态资源放行是个不可或缺的部分。这些资源包括展示在Web应用页面上的图片、CSS和JavaScript等文件。在本文中,我们将通过几个方面来讲述如何在Spring Boot应用中放行静态资源。
一、静态资源文件夹
Spring Boot默认会将所有位于classpath:/static
、classpath:/public
和classpath:/resources
下的文件夹作为静态资源文件夹,并且访问时不需要经过Controller映射,即它们都可以直接通过浏览器路径访问。因此,我们只需要将jar包中的静态文件放入到这些文件夹中即可。
二、自定义静态资源路径
如果我们需要自定义静态资源路径,可以使用addResourceHandler
和addResourceLocations
方法来实现。其中,addResourceHandler
用于指定对外暴露的访问路径,addResourceLocations
用于指定静态资源文件夹的实际路径。
@Configuration
public class MyWebConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/mystatic/**").addResourceLocations("classpath:/mystatic/");
}
}
上面的代码用于将/mystatic
路径映射到classpath:/mystatic/
文件夹。这样,我们只需要将要放置到静态资源文件夹的文件放到classpath:/mystatic/
路径下即可。
三、放行指定请求路径
在某些场景下,我们需要忽略某些请求路径中包含静态资源文件名的部分。比如请求路由为/mypage
,但是该页面需要引用静态资源,此时请求路径中将会包含/mypage/js/myscript.js
等静态资源文件名。此时,我们可以使用WebMvcConfigurer#addViewControllers
方法来添加视图控制器来忽略这些请求。例如,下面的代码将会忽略所有匹配**/js/**
和**/css/**
的请求。
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/**/js/**").setViewName("forward:/");
registry.addViewController("/**/css/**").setViewName("forward:/");
}
}
四、放行Swagger请求
Swagger是一个非常流行的API文档工具,通常会将文档UI的HTML文件和JavaScript文件放在Spring Boot应用的classpath:/META-INF/resources/webjars/swagger-ui/{version}/
文件夹下。在Swagger的配置中,我们需要开放相关URL才能正常访问。下面是一个放行Swagger请求的示例代码。
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
五、放行自定义文件类型
在Spring Boot应用中,有些时候我们可能需要放行一些非常规的文件类型,比如PDF、TXT等。在WebMvcConfigurer
的配置类中,我们可以使用ContentNegotiationConfigurer
来设置允许访问的文件类型。例如,我们可以以下面的代码来放行PDF文件。
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.mediaType("pdf", MediaType.APPLICATION_PDF);
}
}
六、总结
Spring Boot静态资源放行是一个比较基础、必须掌握的应用开发技巧。本文介绍了使用默认静态文件夹、自定义静态文件夹路径、放行指定请求路径、放行Swagger请求和放行自定义文件类型等几个方面的技巧。通过掌握这些技巧,我们能够更加灵活、高效地开发Spring Boot应用。