轉載自: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 @CrossOrigin public class GreetingController {
將@CrossOrigin加到請求方法上,那麼這個請求是支持跨域的,代碼以下spring
@CrossOrigin @RequestMapping("/greeting") public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
更詳細的@CrossOrigin介紹,請參看這裏json
全局配置,也須要spring4.2以上。跨域
@Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000"); } }; }
.addCorsMappings()中的參數表明支持跨域的url,.allowedOrigins()中的參數表明能夠訪問該接口的域名,設置爲」*」可支持全部域。tomcat
這種方法就跟框架無關了,須要兩個jar包,點擊這裏進行下載,兩個jar包能夠放的程序裏,也能夠放到tomcat中,而後將下面的配置寫到web.xml中就能夠了服務器
< filter > < filter-name > CORS </ filter-name > < filter-class > com.thetransactioncompany.cors.CORSFilter </ filter-class > < init-param > < param-name > cors.allowOrigin </ param-name > <!--配置授信的白名單的域名!--> < param-value > * </ param-value > </ init-param > < init-param > < param-name > cors.supportedMethods </ param-name > < param-value > GET, POST, HEAD, PUT, DELETE </ param-value > </ init-param > < init-param > < param-name > cors.supportedHeaders </ param-name > < param-value > Accept, Origin, X-Requested-With, Content-Type, Last-Modified </ param-value > </ init-param > < init-param > < param-name > cors.exposedHeaders </ param-name > < param-value > Set-Cookie </ param-value > </ init-param > < init-param > < param-name > cors.supportsCredentials </ param-name > < param-value > true </ param-value > </ init-param > </ filter > < filter-mapping > < filter-name > CORS </ filter-name > < url-pattern > /* </ url-pattern > </ filter-mapping >