是什么
Cross Origin Resource Sharing:跨源资源共享。
由于同源策略(浏览器的实现的基础安全策略),当前域的资源不允许被其他域的请求所访问,这种机制阻止恶意站点读取另一个站点的数据,但也把合法的读取也给禁了。所以需要一些方案来放开这个限制。
CORS是其中一个方案,也是最常用且推荐的方案。
方案描述
CORS说白了就是类似白名单的机制,可以配置请求来自不同源的是否可以获取本站资源。
- 浏览器发起请求时,会默认在请求header中带上一个Origin,标识请求来源。
- 服务器识别到这个Origin之后,如果允许访问,就需要在response带上
Access-Control-Allow-Origin
这个header并指定请求来源(*代表支持所有来源)。 当浏览器看到带有适当
Access-Control-Allow-Origin
标头的响应时,浏览器允许与客户端站点共享响应数据。spring如何配置跨域
为特定请求跨域
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin
@RequestMapping(method = RequestMethod.GET, path = "/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
controller跨域
@CrossOrigin(origins = "http://example.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@RequestMapping(method = RequestMethod.GET, path = "/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
全局跨域
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}