天天看點

爬山的蝸牛旅程:二、springboot配置靜态資源和跨域請求開始前,請思考一下跨域請求設定靜态資源配置

學習springboot的旅程,就像蝸牛爬山,一點點的往上爬,一點點的欣賞旅途的風景

上一章 搭鍋起火,準備好環境了。現在,我們該開始煮美食了。

開始前,請思考一下

請求是不是可以歸類?(以下請求分類純屬個人見解!)
請求靜态資源:例如 圖檔,腳本檔案,樣式檔案等
請求資料:請求執行業務邏輯後傳回的狀态或結果資料,請求頁面展示資料等
請求視圖:請求頁面
現在都很流行前後分離了,這樣的背景下跨域是很常見的。
問題一:怎麼解決跨域請求?
問題二:假設你有靜态資源情況下,怎麼配置?

跨域請求設定

  • 思路:寫個Filter攔截器,攔截所有請求,并設定跨域請求的範圍等
  • 但是springboot怎麼搞?這裡就需要引入一個好玩的東西:CORS過濾器

CORS過濾器:實作了标準 javax.servlet.Filter 接口。它攔截傳入的HTTP請求,如果将它們辨別為跨域,則在将HTTP請求傳遞到實際目标(Servlet,JSP,靜态XML / HTML文檔)之前,将應用适當的CORS政策和标頭。

  • 那怎麼用:
    • 第一步實作跨域邏輯
    • 第二步加入springboot攔截鍊(springmvc 支援 cors ,具體原理看這)
  • 代碼實作:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * Created by hxz+lh+chen 基礎配置
 */
@Configuration
public class WebMvcConfiguration{
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration corsConfiguration = new CorsConfiguration();
        /* 是否允許請求帶有驗證資訊 */
        corsConfiguration.setAllowCredentials(true);
        /* 允許通路的用戶端域名 */
        corsConfiguration.addAllowedOrigin("*");
        /* 允許服務端通路的用戶端請求頭 */
        corsConfiguration.addAllowedHeader("*");
        /* 允許通路的方法名,GET POST等 */
        corsConfiguration.addAllowedMethod("*");
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}
           

這樣就實作了跨域請求設定了!

靜态資源配置

  • 首先要知道,springboot的項目結構( springboot在resources 下提供了 存儲放靜态資源的static 檔案目錄)
    爬山的蝸牛旅程:二、springboot配置靜态資源和跨域請求開始前,請思考一下跨域請求設定靜态資源配置
  • 問題來了,你怎麼設定靜态資源被加載的映射路徑?
  • 代碼實作:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * Created by hxz+lh+chen 基礎配置
 */
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    //配置spring-boot靜态資源映射路徑
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
                //.setCachePeriod(31556926);//表示緩存的時間(秒)
    }
}

//-----------------------以下是頁面引用
<script src="/static/com/hxz/js/jquery-3.2.1.slim.min.js" ></script>
<link rel="stylesheet" href="/static/com/hxz/css/style.css">
           

到這裡就ok了!!!

那麼,接下來是思考一下,如果是前後不分離的情況,你要怎麼支援頁面開發?

繼續閱讀