您的位置:

Spring Boot静态资源放行指南

在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应用。