@CrossOrigin解决跨域问题
跨域浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。如下所示域名:主域名不同 http://www.baidu.com/index.html -->http://www.sina.com/test.js子域名不同 http://www.666.baidu.com/index.html–>http://www.555.baidu.com/test.js
·
跨域
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
如下所示
域名:
- 主域名不同 http://www.baidu.com/index.html -->http://www.sina.com/test.js
- 子域名不同 http://www.666.baidu.com/index.html
–>http://www.555.baidu.com/test.js - 域名和域名ip http://www.baidu.com/index.html
–>http://180.149.132.47/test.js
端口:
- http://www.baidu.com:8080/index.html–>
http://www.baidu.com:8081/test.js
协议: - http://www.baidu.com:8080/index.html–>
https://www.baidu.com:8080/test.js
注:
1、端口和协议的不同,只能通过后台来解决
2、localhost和127.0.0.1虽然都指向本机,但也属于跨域
@CrossOrgin解决跨域问题
@CrossOrigin注解使用要求的环境配置
- Spring4.2+
spring注解@CrossOrigin不起作用的原因
- 版本问题,springMVC的版本不支持
- 非@CrossOrigin没有解决跨域请求问题,而是不正确的请求导致无法得到预期的响应,导致浏览器端提示跨域问题。
- 在Controller注解上方添加@CrossOrigin注解后,仍然出现跨域问题,解决方案之一就是:在@RequestMapping注解中没有指定Get、Post方式,具体指定后,问题解决。
常用属性
@CrossOrigin(origins,maxAge)
- origins 是一个字符串数组的类型(String []),用于表示那些域名可以访问此接口/映射。多个域名之间用逗号“,”隔开,如果想向所有网址开放,可以直接填写星号“*”,或者不填写此项。
- maxAge 被解释为“预请求的结果的有效期”,单位是秒。
代码
在Spring Boot中使用带有@CrossOrigin注释的controller方法CORS配置,不需要任何特定的配置。
@CrossOrigin注解可以单独在类上使用,也可以在方法上使用
public class LoginController {
@Autowired
UserService userService;
@CrossOrigin
@PostMapping(value = "/api/login")
@ResponseBody
public Result login(@RequestBody User requestUser){
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
User user = userService.get(username,requestUser.getPassword());
if(null == user){
return new Result(400);
}else{
return new Result(200);
}
}
}
login方法跨域被所有的网站访问
@CrossOrigin可以同时在类上、方法上同时使用,来控制不同网站访问不同的映射,下面代码转载自
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin("http://domain2.com")
@GetMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@DeleteMapping("/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
remove方法可以被所有网站的访问,retrieve方法只接受http://domain2.com网站发送的请求。
更多推荐
已为社区贡献4条内容
所有评论(0)