• Spring Boot Web应用开发 CORS 跨域请求支持


    一、Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等

    CORS与JSONP相比

    1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。

    2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。

    3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS

    浏览器支持情况

    Chrome 3+

    Firefox 3.5+

    Opera 12+

    Safari 4+

    Internet Explorer 8+

    二、在spring MVC 中可以配置全局的规则,也可以使用@CrossOrigin注解进行细粒度的配置。

    全局配置:

    @Configuration
    
    public class CustomCorsConfiguration {
    
     
    
      @Bean
    
      public WebMvcConfigurer corsConfigurer() {
    
        return new WebMvcConfigurerAdapter() {
    
             @Override
    
             public void addCorsMappings(CorsRegistry registry) {
    
                 registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");
    
             }
    
        };
    
      }
    
    }

    或者是

    /**
    
     * 全局设置
    
     *
    
     * @author wujing
    
     */
    
    @Configuration
    
    public class CustomCorsConfiguration2 extends WebMvcConfigurerAdapter {
    
     
    
      @Override
    
      public void addCorsMappings(CorsRegistry registry) {
    
        registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");
    
      }
    
    }
    
     

    定义方法:

    /**
    
     * @author wujing
    
     */
    
    @RestController
    
    @RequestMapping("/api")
    
    public class ApiController {
    
     
    
      @RequestMapping(value = "/get")
    
      public HashMap<String, Object> get(@RequestParam String name) {
    
        HashMap<String, Object> map = new HashMap<String, Object>();
    
        map.put("title", "hello world");
    
        map.put("name", name);
    
        return map;
    
      }
    
    }

    测试js:

    $.ajax({
    
                       url: "http://localhost:8081/api/get",
    
                    type: "POST",
    
                    data: {
    
                        name: "测试"
    
                    },
    
                    success: function(data, status, xhr) {
    
                       console.log(data);
    
                       alert(data.name);
    
                    }
    
                  });

    细粒度配置

    /**
    
     * @author wujing
    
     */
    
    @RestController
    
    @RequestMapping(value = "/api", method = RequestMethod.POST)
    
    public class ApiController {
    
     
    
      @CrossOrigin(origins = "http://localhost:8080")
    
      @RequestMapping(value = "/get")
    
      public HashMap<String, Object> get(@RequestParam String name) {
    
        HashMap<String, Object> map = new HashMap<String, Object>();
    
        map.put("title", "hello world");
    
        map.put("name", name);
    
        return map;
    
      }
    
    }

    转自:http://www.roncoo.com/article/detail/125503

     


    延伸阅读
     
  • 相关阅读:
    设计模式(五)——单例模式
    设计模式(四)——工厂模式
    设计模式(三)—— 装饰者模式
    设计模式(二)—— 观察者模式
    JAVA环境配置
    在线求中位数
    不能对自己期望太大,但总是要拼一拼
    Leetcode | String to Integer (atoi)
    Leetcode | Simplify Path
    Leetcode | Longest Common Prefix
  • 原文地址:https://www.cnblogs.com/lywJ/p/10270970.html
Copyright © 2020-2023  润新知