美文网首页
SpringMVC跨域

SpringMVC跨域

作者: winyiwin | 来源:发表于2017-10-22 15:16 被阅读0次

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

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

    使用方法也特别简单,只需在需要跨域访问的方法注解@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,则下面

    <script>
            $(function(){
                console.log('--start---')
    
                $.getJSON("http://localhost:8080/seckill/time/now",{},function(res) {
                    if(res) {
                        console.log(res);
                    }
                })
            });
    </script>
    

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

    Jietu20171022-143433@2x.jpg

    但是浏览器中返回确是

    Jietu20171022-143505@2x.jpg

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

    加注解截图


    res1

    不加注解截图


    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跨域

          本文链接:https://www.haomeiwen.com/subject/wawguxtx.html