跨域是由于http安全协议对跨域的数据不信任造成数据读取失败的现象 ,两个服务器彼此不太信任。同班同学找你借钱,彼此认识,都相互信任,借给他。默认人找你,不写任,不借。---如果第三人说,它是我哥们,人还可以,你借给它吧,经过了一番介绍,ok,信任了,借给它吧
今天做本地开发测试,遇到了跨域问题。记录一下我的解决方案吧
1.网上说,可以前端配置,也可以后端配置。一般来讲,后端配置了允许跨域,就可以解决跨域问题。
response的响应头里面加上acao----即access-control-allow-origin
第一种方案:response配置请求头的来源
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST,GET");
我的代码:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/findAll")
public List<User> findAll(HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST,GET");
return userService.findAll();
}
}
这种方法只能单个配置,对于原生的ajax请求 能够解决跨域,但是对于axios发起的请求,仍然会报跨域问题。
2.第二种方案:全局配置,通过在springmvc.xml中加上
// 简单配置,未配置的均使用默认值,就是全面放开
<mvc:cors> <mvc:mapping path="/**" /> </mvc:cors>
// 这是一个全量配置
<mvc:cors>
<mvc:mapping path="/api/**" allowed-origins="http://domain1.com, http://domain2.com" allowed-methods="GET, PUT" allowed-headers="header1, header2, header3" exposed-headers="header1, header2" allow-credentials="false" max-age="123" />
<mvc:mapping path="/resources/**" allowed-origins="http://domain1.com" />
</mvc:cors>
则所有的请求都允许跨域访问。(注意:spring的版本要高于4.2,我的是5.0.2,低版本可能不生效)。
也可以通过注解进行单个配置
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin("http://domain2.com")
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
}
最后:实际发布到服务器上,要删除以上配置,提高应用的安全性。