转载自:https://blog.csdn.net/james_wade63/article/details/50772041html
跨域是指html文件所在的服务器与ajax请求的服务器是不一样的ip+port,例如:
- ‘192.168.1.1:8080’ 与 ‘192.168.1.2:8080’是不一样的域。
- ‘192.168.1.1:8080’ 与 ‘192.168.1.1:8081’是不一样的域。java
解决此类问题的方法不少,有须要客户端和服务端都要更改的,例如jsonp,iframe等等;有只须要客户端更改的,这种状况只能出如今hybrid app开发中,即经过调用native方法来进行网络请求;有只须要服务端配置的,下面介绍3种服务端配置的方法。web
第一种
若是您使用的mvc框架是spring4.2以上的话,一个@CrossOrigin就能够搞定。将@CrossOrigin加到Controller上,那么这个Controller全部的请求都是支持跨域的,代码以下:ajax
@Controller
@CrossOriginpublic class GreetingController {
将@CrossOrigin加到请求方法上,那么这个请求是支持跨域的,代码以下spring
@CrossOrigin
@RequestMapping("/greeting")public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
更详细的@CrossOrigin介绍,请参看这里json
第二种
全局配置,也须要spring4.2以上。跨域
@BeanpublicWebMvcConfigurer corsConfigurer() {return newWebMvcConfigurerAdapter() {
@Overridepublic voidaddCorsMappings(CorsRegistry registry) {
registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
}
};
}
.addCorsMappings()中的参数表明支持跨域的url,.allowedOrigins()中的参数表明能够访问该接口的域名,设置为”*”可支持全部域。tomcat
第三种
这种方法就跟框架无关了,须要两个jar包,点击这里进行下载,两个jar包能够放的程序里,也能够放到tomcat中,而后将下面的配置写到web.xml中就能够了服务器
CORS
com.thetransactioncompany.cors.CORSFilter
cors.allowOrigin
*
cors.supportedMethods
GET, POST, HEAD, PUT, DELETE
cors.supportedHeaders
Accept, Origin, X-Requested-With, Content-Type, Last-Modified
cors.exposedHeaders
Set-Cookie
cors.supportsCredentials
true
CORS
/*