Construct2及Springboot關於跨域訪問的解決辦法

介紹:

在學習SpringBoot期間,我發現Springboot的確更加方便快捷一些,所以就簡單打包了一個小jar丟在服務器上做測試。

剛好用過Construct2這個遊戲引擎,所以就試試能不能實現通信。

服務端(SpringBoot)

服務端代碼沒什麼可貼的,和正常的服務端寫法一樣。

不過因爲Construct2這個引擎自帶了一套網絡通信的插件,所以無法使用像Html那樣簡單的Ajax發送請求。

後面寫寫一些問題的處理辦法和坑。

客戶端(Construct2)

客戶端Construct2使用主要是一個插件<AJAX>

簡單寫兩句邏輯語句

這裏貼一下官網文檔的地址  Ajax插件介紹

執行

本地開啓服務器,對url進行簡單的瀏覽器訪問,顯示hello world正常。

然後啓動Construct2,發現沒有反應後,我打開控制檯發現一個報錯信息。

這個報錯信息翻譯過來就是“Access-Control-Allow-Origin"沒有在request資源裏,而Access-Control-Allow-Origin就是Html5中爲了解決跨域問題的一種解決策略。

而對於Construct2來說,本身啓動一個遊戲工程相當於啓動了一個服務器,你可以把它認爲它內置了服務器,在菜單-File-Preferences-Preview中可以看到它本身是有url地址和端口的,所以這樣就會涉及到跨域問題。

那麼將Construct2中的url和端口改成服務器對應的端口可行嗎,答案是不行的,因爲tomcat啓動後已經佔用了8080端口,所以Construct2啓動後8080無法被使用,端口不一致也會觸發到跨域問題。

既然“Access-Control-Allow-Origin”沒有在Request中,我給Construct2邏輯加上頭部不就好了。如圖:

出現了另外一個錯誤

“Access-Control-Allow-Origin”不被允許。

因爲我們的服務端默認會阻止其它“域”的訪問,所以需要給服務端添加攔截器,修改其默認的訪問權限管理。

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;


@Configuration
public class CorsConf {

    @Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(source);

    }
}

只要給我們的服務端加上一個攔截器即可。

這裏我將import都貼進來,是因爲CorsFilter有兩個引用包,所以需要注意一下。

再次執行,顯示成功了。

那麼,我將Construct2中之前添加的頭部邏輯去掉會怎樣呢?

再次執行,顯示成功了。

說明了Construct2的請求是默認使用“Access-Control-Allow-Origin”跨域訪問的。

結束

如果有什麼錯誤,請及時提醒我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章