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

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

相关文章

  • SpringBoot根据目录结构自动配置Url前缀方式

    SpringBoot根据目录结构自动配置Url前缀方式

    这篇文章主要介绍了SpringBoot根据目录结构自动配置Url前缀方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot接口如何对参数进行校验

    SpringBoot接口如何对参数进行校验

    这篇文章主要介绍了SpringBoot接口如何对参数进行校验,在以SpringBoot开发Restful接口时, 对于接口的查询参数后台也是要进行校验的,同时还需要给出校验的返回信息放到上文我们统一封装的结构中
    2022-07-07
  • File的API和常用方法详解_动力节点Java学院整理

    File的API和常用方法详解_动力节点Java学院整理

    这篇文章主要为大家详细介绍了File的API和常用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java中HashMap里面key为null存放到哪

    Java中HashMap里面key为null存放到哪

    这篇文章主要介绍了Java中HashMap里面key为null存放到哪,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • java中Consumer接口的使用教程详解

    java中Consumer接口的使用教程详解

    Java 8 引入了 java.util.function 包,其中包含了一些常用的函数式接口,Consumer 接口是其中一个函数式接口,用于表示接受一个输入参数并执行某种操作的操作者,下面我们就来学习一下他的具体使用吧
    2023-12-12
  • Springboot如何通过yml配置文件为静态成员变量赋值

    Springboot如何通过yml配置文件为静态成员变量赋值

    这篇文章主要介绍了Springboot如何通过yml配置文件为静态成员变量赋值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java利用沙箱支付实现电脑扫码支付教程

    Java利用沙箱支付实现电脑扫码支付教程

    当我们制作的项目需要实现电脑扫码支付功能时,我们往往会采用沙箱支付来模拟实现。本文将主要介绍如何在Java中利用沙箱支付实现这一功能,需要的可以参考一下
    2022-01-01
  • java 动态生成bean的案例

    java 动态生成bean的案例

    这篇文章主要介绍了java 动态生成bean的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 使用Jacoco获取 Java 程序的代码执行覆盖率的步骤详解

    使用Jacoco获取 Java 程序的代码执行覆盖率的步骤详解

    这篇文章主要介绍了使用Jacoco获取 Java 程序的代码执行覆盖率的步骤详解,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • 全面解读Spring Boot 中的Profile配置体系

    全面解读Spring Boot 中的Profile配置体系

    配置体系是基于 Spring Boot 框架开发应用程序的基础,而自动配置也是该框架的核心功能之一。本文梳理Spring Boot 中的Profile配置体系的相关知识,感兴趣的朋友跟随小编一起看看吧
    2021-05-05

最新评论