@CrossOrigin 注解可以实现对注解的控制器方法的跨域请求,如下例所示:
@RestController@RequestMapping("/account")public class AccountController {@CrossOrigin@GetMapping("/{id}")public Account retrieve(@PathVariable Long id) {// ...}@DeleteMapping("/{id}")public void remove(@PathVariable Long id) {// ...}}
默认情况下,@CrossOrigin 允许:
- 所有 origins
- 所有 headers
- 所有控制器被映射到 HTTP methods
allowCredentials 默认不启用,因为这建立了一个信任级别,暴露了敏感的用户特定信息(如 cookies 和 CSRF 令牌),应该只在适当的地方使用。当它被启用时,allowOrigins 必须被设置为一个或多个特定的域(但不是特殊值 "*"),或者可以使用 allowOriginPatterns 属性来匹配一组动态的来源。
maxAge 被设置为 30 分钟。
@CrossOrigin 在类的层面上也是支持的,并且被所有的方法所继承,如下例所示:
@CrossOrigin(origins = "https://domain2.com", maxAge = 3600)@RestController@RequestMapping("/account")public class AccountController {@GetMapping("/{id}")public Account retrieve(@PathVariable Long id) {// ...}@DeleteMapping("/{id}")public void remove(@PathVariable Long id) {// ...}}
你可以在类的层次和方法的层次上使用 @CrossOrigin,如下例所示:
@CrossOrigin(maxAge = 3600)@RestController@RequestMapping("/account")public class AccountController {@CrossOrigin("https://domain2.com")@GetMapping("/{id}")public Account retrieve(@PathVariable Long id) {// ...}@DeleteMapping("/{id}")public void remove(@PathVariable Long id) {// ...}}
下面是使用默认的 @CrossOrigin 后,响应的头信息
