项目环境
springboot(2.0.6.RELEASE)+mybatis(1.3.0)
场景
应用A页面,ajax请求到应用B
实现
- 在应用B配置跨域请求,如下:
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 1允许任何域名使用
// corsConfiguration.addAllowedOrigin("http://localhost:8680"); // 1允许指定域名使用
corsConfiguration.addAllowedHeader("*"); // 2允许任何头
corsConfiguration.addAllowedMethod("*"); // 3允许任何方法(post、get等)
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
-
运行报错
-
采用jsonp实现
-
后台
@RequestMapping("detail")
@ResponseBody
public JSONPObject caseDetailOfFirstPartyRun(HttpServletRequest request){
ResponseModel responseModel = new ResponseModel();
Thread thread = new Thread(() ->{
try {
caseReportService.caseDetailOfFirstPartyRun(date);
} catch (Exception e) {
responseModel.sendError("任务异常");
}
});
executor.execute(thread);
responseModel.sendSuccess("开始");
return new JSONPObject("callback",responseModel);
}
- js
$.ajax({
url:url,
type:"GET",//只适用于get
dataType:"jsonp",
jsonp:"callback",//这里是发送到后台的函数名(自定),后台可直接String callback= request.getParameter("callback");
jsonpCallback: "callback",//这里不写会报错,与return new JSONPObject("callback",responseModel);名称对应
cache:false,
data:{
"start":start,
"end":end
},
success : function(data) {
console.log(JSON.stringify(data));
if (data.resultCode=="200"){
$.modal.alertSuccess(data.message);
}else {
$.modal.alertError(data.message);
}
}
})
至此,已实现ajax异步跨域请求。
仅作为自己记录,可能存在错误。