Construct2及Springboot关于跨域访问的解决办法

介绍:

在学习SpringBoot期间,我发现Springboot的确更加方便快捷一些,所以就简单打包了一个小jar丢在服务器上做测试。

刚好用过Construct2这个游戏引擎,所以就试试能不能实现通信。

服务端(SpringBoot)

服务端代码没什么可贴的,和正常的服务端写法一样。

不过因为Construct2这个引擎自带了一套网络通信的插件,所以无法使用像Html那样简单的Ajax发送请求。

后面写写一些问题的处理办法和坑。

客户端(Construct2)

客户端Construct2使用主要是一个插件<AJAX>

Construct2及Springboot关于跨域访问的解决办法

简单写两句逻辑语句

这里贴一下官网文档的地址  Ajax插件介绍

执行

本地开启服务器,对url进行简单的浏览器访问,显示hello world正常。

然后启动Construct2,发现没有反应后,我打开控制台发现一个报错信息。

Construct2及Springboot关于跨域访问的解决办法

这个报错信息翻译过来就是“Access-Control-Allow-Origin"没有在request资源里,而Access-Control-Allow-Origin就是Html5中为了解决跨域问题的一种解决策略。

而对于Construct2来说,本身启动一个游戏工程相当于启动了一个服务器,你可以把它认为它内置了服务器,在菜单-File-Preferences-Preview中可以看到它本身是有url地址和端口的,所以这样就会涉及到跨域问题。

Construct2及Springboot关于跨域访问的解决办法

那么将Construct2中的url和端口改成服务器对应的端口可行吗,答案是不行的,因为tomcat启动后已经占用了8080端口,所以Construct2启动后8080无法被使用,端口不一致也会触发到跨域问题。

既然“Access-Control-Allow-Origin”没有在Request中,我给Construct2逻辑加上头部不就好了。如图:

Construct2及Springboot关于跨域访问的解决办法

出现了另外一个错误

Construct2及Springboot关于跨域访问的解决办法

“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”跨域访问的。

结束

如果有什么错误,请及时提醒我。