伺服器端解決跨域問題的三種方法
跨域是指html檔案所在的伺服器與ajax請求的伺服器是不同的ip+port,例如:
- ‘192.168.1.1:8080’ 與 ‘192.168.1.2:8080’是不同的域。
- ‘192.168.1.1:8080’ 與 ‘192.168.1.1:8081’是不同的域。
解決此類問題的方法很多,有需要客戶端和服務端都要更改的,例如jsonp,iframe等等;有隻需要客戶端更改的,這種情況只能出現在hybrid app開發中,即通過呼叫native方法來進行網路請求;有隻需要服務端配置的,下面介紹3種服務端配置的方法。
第一種
如果您使用的mvc框架是spring4.2以上的話,一個@CrossOrigin就可以搞定。將@CrossOrigin加到Controller上,那麼這個Controller所有的請求都是支援跨域的,程式碼如下:
@Controller
@CrossOrigin
public class BaseController {
將@CrossOrigin加到請求方法上,那麼這個請求是支援跨域的,程式碼如下:
@CrossOrigin
@RequestMapping("/greeting")
public @ResponseBody String getCoding(@RequestParam(required=false, defaultValue="World") String name) {
更詳細的@CrossOrigin介紹,請參看https://spring.io/guides/gs/rest-service-cors/
第二種
全域性配置,也需要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()中的引數代表可以訪問該介面的域名,設定為”*”可支援所有域。
第三種
這種方法就跟框架無關了,需要兩個jar包,點選https://download.csdn.net/download/james_wade63/9451024進行下載,兩個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 >
轉自:
https://blog.csdn.net/james_wade63/article/details/50772041