SpringMVC跨域

开发过程中,常常会遇到跨域访问的问题,下面记录一下常用的解决方案。

  1. 可以从Spring的官方blog截图看到,从spring4.2GA开始,spring提供了一种跨域解决方案。

使用方法也特别简单,只需在需要跨域访问的方法注解@CrossOrigin就可以实现。

@RestController
@RequestMapping("/account")
public class AccountController {

    @CrossOrigin
    @GetMapping("/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }

    @DeleteMapping("/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

如果需要全局设置或当个Controller方法设置则需要在Controller类上注解即可

@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {}

实验一下
如果不加@CrossOrigin,则下面


执行的第一次是可以访问到方法的


但是浏览器中返回确是

接下来接着刷新浏览器,则是不会再次进入到后台方法的。
加上注解之后,则可以顺利返回JSON值

加注解截图


SpringMVC跨域_第3张图片
res1

不加注解截图


SpringMVC跨域_第4张图片
res2

可以看到res1和res2中唯一不同的就是Response Headers
主要是 DefaultCorsProcessor #handleInternal方法帮我们做的Response的处理。

HttpHeaders responseHeaders = response.getHeaders();
responseHeaders.setAccessControlAllowOrigin(allowOrigin);
responseHeaders.add(HttpHeaders.VARY, HttpHeaders.ORIGIN);

资料
MDN
[构建public APIs与CORS]

你可能感兴趣的:(SpringMVC跨域)