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”跨域访问的。
结束
如果有什么错误,请及时提醒我。