spring cloud实现前端跨域问题的解决方案

 更新时间:2018年01月19日 11:47:27   作者:牛奋lch  
这篇文章主要介绍了 spring cloud实现前端跨域问题的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

当我们需要将spring boot以restful接口的方式对外提供服务的时候,如果此时架构是前后端分离的,那么就会涉及到跨域的问题,那怎么来解决跨域的问题了,下面就来探讨下这个问题。

解决方案一:在Controller上添加@CrossOrigin注解

使用方式如下:

@CrossOrigin // 注解方式 
@RestController 
public class HandlerScanController { 
   
   
  @CrossOrigin(allowCredentials="true", allowedHeaders="*", methods={RequestMethod.GET, 
      RequestMethod.POST, RequestMethod.DELETE, RequestMethod.OPTIONS, 
      RequestMethod.HEAD, RequestMethod.PUT, RequestMethod.PATCH}, origins="*") 
  @PostMapping("/confirm") 
  public Response handler(@RequestBody Request json){ 
     
    return null; 
  } 
} 

解决方案二:全局配置

代码如下:

@Configuration 
  public class MyConfiguration { 
 
    @Bean 
    public WebMvcConfigurer corsConfigurer() { 
      return new WebMvcConfigurerAdapter() { 
        @Override 
        public void addCorsMappings(CorsRegistry registry) { 
          registry.addMapping("/**") 
          .allowCredentials(true) 
          .allowedMethods("GET"); 
        } 
      }; 
    } 
  } 

解决方案三:结合Filter使用

在spring boot的主类中,增加一个CorsFilter 

/** 
   * 
   * attention:简单跨域就是GET,HEAD和POST请求,但是POST请求的"Content-Type"只能是application/x-www-form-urlencoded, multipart/form-data 或 text/plain 
   * 反之,就是非简单跨域,此跨域有一个预检机制,说直白点,就是会发两次请求,一次OPTIONS请求,一次真正的请求 
   */ 
  @Bean 
  public CorsFilter corsFilter() { 
    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
    final CorsConfiguration config = new CorsConfiguration(); 
    config.setAllowCredentials(true); // 允许cookies跨域 
    config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin 
    config.addAllowedHeader("*");// #允许访问的头信息,*表示全部 
    config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 
    config.addAllowedMethod("OPTIONS");// 允许提交请求的方法,*表示全部允许 
    config.addAllowedMethod("HEAD"); 
    config.addAllowedMethod("GET");// 允许Get的请求方法 
    config.addAllowedMethod("PUT"); 
    config.addAllowedMethod("POST"); 
    config.addAllowedMethod("DELETE"); 
    config.addAllowedMethod("PATCH"); 
    source.registerCorsConfiguration("/**", config); 
    return new CorsFilter(source); 
  } 

当然,如果微服务多的话,需要在每个服务的主类上都加上这么段代码,这违反了DRY原则,更好的做法是在zuul的网关层解决跨域问题,一劳永逸。

关于前端跨域的更多信息,请参考:https://www.jb51.net/article/83093.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JAVA面试题之Forward与Redirect的区别详解

    JAVA面试题之Forward与Redirect的区别详解

    这篇文章主要给大家介绍了在JAVA面试中可能遇到会遇到的一道题,就是java中Forward与Redirect两者之前的区别,文中介绍的非常详细,对大家具有一定参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Mybatis-plus获取雪花算法生成的ID并返回生成ID

    Mybatis-plus获取雪花算法生成的ID并返回生成ID

    本文主要介绍了Mybatis-plus获取雪花算法生成的ID并返回生成ID,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • 解决Mybatis中foreach嵌套使用if标签对象取值的问题

    解决Mybatis中foreach嵌套使用if标签对象取值的问题

    这篇文章主要介绍了解决Mybatis中foreach嵌套使用if标签对象取值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • IDEA中SpringBoot项目的yml多环境配置方式

    IDEA中SpringBoot项目的yml多环境配置方式

    这篇文章主要介绍了IDEA中SpringBoot项目的yml多环境配置,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • Java实现数据库连接池的方法

    Java实现数据库连接池的方法

    这篇文章主要介绍了Java实现数据库连接池的方法,涉及java数据库连接池的创建、连接、刷新、关闭及状态获取的常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java模拟微信来电提醒示例

    Java模拟微信来电提醒示例

    这篇文章主要为大家介绍了Java模拟微信来电提醒示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • spring boot 即时重新启动(热更替)使用说明

    spring boot 即时重新启动(热更替)使用说明

    这篇文章主要介绍了spring boot 即时重新启动(热更替)的相关资料,需要的朋友可以参考下
    2017-12-12
  • SpringBoot文件上传与下载功能实现详解

    SpringBoot文件上传与下载功能实现详解

    文件上传与下载是Web应用开发中常用的功能之一。接下来我们将讨论如何在Spring Boot的Web应用开发中,如何实现文件的上传与下载,感兴趣的可以了解一下
    2022-10-10
  • springboot项目开启https协议的项目实现

    springboot项目开启https协议的项目实现

    本文主要介绍了springboot项目开启https协议的项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码

    Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码

    这篇文章主要介绍了Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论