服務器端解決跨域問題
阿新 • • 發佈:2018-03-12
4.2 post ber ebo tty val 所有 全局 cor
跨域是指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 GreetingController {
- 1
- 2
- 3
將@CrossOrigin加到請求方法上,那麽這個請求是支持跨域的,代碼如下
@CrossOrigin
@RequestMapping("/greeting")
public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
- 1
- 2
- 3
更詳細的@CrossOrigin介紹,請參看這裏
第二種
全局配置,也需要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()中的參數代表可以訪問該接口的域名,設置為”*”可支持所有域。
服務器端解決跨域問題