spring boot CORS 支持

作者: 逗比punk | 来源:发表于2017-07-14 23:20 被阅读124次

    一、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;
    } }
    

    相关文章

      网友评论

        本文标题:spring boot CORS 支持

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