CORS
跨域资源共享(CORS): 访问不同域站点上的资源;比如a.com上的某页面可以访问b.com上的资源,c.com上的某页面可以访问a.com上资源。
不转载了,链接: CORS(跨域资源共享)简介
Spring framework 对 CORS 的支持
controller上对类和方法的配置
Spring通过@CrossOrigin
注解来实现对CORS的功能支持。
方法级
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}类级
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}混合
Spring结合类和方法的注解内容生成。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@CrossOrigin("http://domain2.com")
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
全局配置
默认是GET,HEAD和POST有效
- java 配置
/**
路径, 全部默认属性1
2
3
4
5
6
7
8
9@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}自定义路径和属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class WebConfig extends WebMvcConfigurerAdapter {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://domain2.com")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false).maxAge(3600);
}
}
- XML 配置
/**
路径, 全部默认属性1
2
3<mvc:cors>
<mvc:mapping path="/**" />
</mvc:cors>自定义属性
1
2
3
4
5
6
7
8
9
10
11
12
13<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>