springboot WebMvcConfigurer配置靜態資源和解決跨域


前言

雖然現在都流行前后端分離部署,但有時候還是需要把前端文件跟后端文件一起打包發布,這就涉及到了springboot的靜態資源訪問的問題。不單只是靜態資源打包,比如使用本地某個目錄作為文件存儲,也可通過WebMvcConfigurer接口來配置。

在與前端交互的過程中,也會碰到一個跨域的問題。我們也可通過WebMvcConfigurer接口來解決跨域的問題。

springboot默認靜態文件目錄

Spring Boot 默認為我們提供了靜態資源處理,我建議大家直接使用Spring Boot的默認配置即可。默認提供的靜態資源映射如下:

  • classpath:/META-INF/resources
  • classpath:/resources
  • classpath:/static
  • classpath:/public

這些目錄的靜態資源時可以直接訪問到的。上面這幾個都是靜態資源的映射路徑,優先級順序為:META-INF/resources > resources > static > public

使用第一講中spring initilize工具創建的springboot工程,默認也給我們創建了classpath:/static這個目錄

【快學springboot】6.WebMvcConfigurer配置靜態資源和解決跨域

 

我們往這個目錄放一個圖片,head.jpg

【快學springboot】6.WebMvcConfigurer配置靜態資源和解決跨域

 

通過瀏覽器訪問http://localhost:8080/head.jpg

【快學springboot】6.WebMvcConfigurer配置靜態資源和解決跨域

 

自定義配置靜態資源配置

以上這些都是springboot默認給我們提供的,那么我們有沒有能力自己自定義一個靜態資源映射呢?完全可以。使用WebMvcConfigurer這個類即可實現自定義靜態資源配置。

我們新建一個WebConfig類實現WebMvcConfigurer接口 ,如下:

@Configuration
public class WebConfig implements WebMvcConfigurer {
 
}

現在我們什么都不配置,然后重啟應用,訪問http://localhost:8080/head.jpg。卻發現程序報404了:

這是因為我們配置了WebMvcConfigurer,這就替換了springboot原先的默認配置。這里我們想要自定義一個靜態資源配置,比如,我們/file/**這樣的請求,定向到我的D盤根目錄下。我們重寫WebMvcConfigurer接口的addResourceHandlers方法。如下:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
 registry.addResourceHandler("/file/**")
 .addResourceLocations("file:D:\");
}

然后把head.jpg圖片放到D盤下:

這里需要注意的是,配置外部的資源要使用file聲明,配置jar包內部的使用classpath聲明。

WebMvcConfigurer接口解決跨域問題

可以通過重寫WebMvcConfigurer的addCorsMappings方法,可以配置跨域的問題。如下:

/**
 * 跨域支持
 */
 @Override
 public void addCorsMappings(CorsRegistry registry) {
 registry.addMapping("/**")
 .allowedOrigins("*")
 .allowCredentials(true)
 .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH")
 .maxAge(3600 * 24);
 }

總結

WebMvcConfigurer接口不單只是能夠配置靜態資源訪問和解決跨域問題,它還可以配置很多Web請求相關的東西,比如攔截器,數據轉化(MessageConverters)等,礙於篇幅,這里就先不討論了。可以配置的東西,可以通過接口的方法查看,如下:

【快學springboot】6.WebMvcConfigurer配置靜態資源和解決跨域

 

SpringBoot 默認幫我們做了很多事情,這大大方便了我們的開發。 但是,有時候我們想要自己定義一些Handler,Interceptor,ViewResolver,MessageConverter,在Spring Boot 2.0之前版本都是靠重寫WebMvcConfigurerAdapter的方法來添加自定義攔截器,消息轉換器等。SpringBoot 2.0 后,該類被標記為@Deprecated。現在,我們只能靠實現WebMvcConfigurer接口來實現了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM