代码地址:https://gitee.com/shiqi10001/springboot-crossorigin-server1.git,
https://gitee.com/shiqi10001/springboot-crossorigin-server2.git
参考springboot官方文档:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
@CrossOrigin注解
一个springboot项目里(比如8010端口)后端写了一个接口,static目录下写了一个页面,这个页面可以访问后端接口(相同协议ip端口)
server:
port: 8010
servlet:
context-path: /demo1
package org.example.demo1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class HelloController {
@PostMapping("/hello")
public List hello() {
List list = new ArrayList();
list.add("hello");
return list;
}
@GetMapping("/hi")
public Object hi() {
return "hi";
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
欢迎!
<script src="jquery-2.1.4.js"></script>
<script>
$.ajax({
url:"/demo1/hello",
type:"post",
dataType:"json",
success: function (data) {
console.log(data);
},
error: function (a,b,c,d,e,f) {
console.log(a);
console.log(b);
console.log(c);
console.log(d);
console.log(e);
console.log(f);
},
})
</script>
</body>
</html>
但是这个页面不能访问另一个项目(比如8020端口)的接口,浏览器同源策略
server:
port: 8020
servlet:
context-path: /demo2
package org.example.demo2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class HelloController {
@PostMapping("/hello2")
public List hello() {
List list = new ArrayList();
list.add("hello2");
return list;
}
@GetMapping("/hi2")
public Object hi() {
return "hi2";
}
}
在另一个程序要访问的接口上加上@CrossOrigin注解就可以了,默认情况下@CrossOrigin
允许所有的origin和@RequestMapping
annotation中指定的HTTP方法
package org.example.demo2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class HelloController {
@CrossOrigin
@PostMapping("/hello2")
public List hello() {
List list = new ArrayList();
list.add("hello2");
return list;
}
@GetMapping("/hi2")
public Object hi() {
return "hi2";
}
}