Springboot 2.X 接口跨域问题解决方案-Cors配置

做小程序的时候,有个别的接口,需要提供给小程序服务以外的推广页使用,推广页域名与小程序后端服务接口域名产生了跨域问题,查了部分资料后,有两种解决方案。

首先说一下跨域问题的原因:

跨域是指:浏览器A服务器B获取的静态资源,包括Html、Css、Js,然后在Js中通过Ajax访问C服务器的静态资源或请求。即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源。

同源策略是指:浏览器A服务器B获取的静态资源,包括Html、Css、Js,为了用户安全,浏览器加了限制,其中的Js通过Ajax只能访问B服务器的静态资源或请求。即:浏览器A从哪拿的资源,那资源中就只能访问哪。

同源是指:同一个请求协议(如:Http或Https)、同一个Ip、同一个端口,3个全部相同,即为同源。

解决方案有很多,本文只记录cors的方案。

SpringBoot2.x配置Cors

SpringBoot2.x主要提供了两种方式来支持Cors,如下:

| 方式        |作用范围| 说明  |

|:-------:|:-------------:|:-----:|

| @CrossOrigin  |一个Controller中全部接口或是其中一个特定的接口| 配置、定制特定的请求接口 |

|WebMvcConfigurer对象| 全部接口 |适用于全局配置|

第一种: 使用@CrossOrigin注解

代码实例


@RestController

@RequestMapping(value = "/api")

@CrossOrigin

public class UsersController{

    @Autowired

    private UsersService usersService;

    @PostMapping("userInfo/{openid}")

    @CrossOrigin

    public User getUserInfo(@PathVariable String openid) {

        return userService.get(openid);

    }

}


其中,@CrossOrigin注解可以使用以下参数

| 名称 |类型| 范围  | 必填 |请求头字段 |

|:-------:|:-------------:|:-----:|:-----:|:-----:|

|  value  |String数组 |类或方法|是|Access-Control-Allow-Origin|

|  origins  |String数组 |类或方法|是,同value,可以二选一|Access-Control-Allow-Origin|

|  methods  |String数组 |类或接口|是|Access-Control-Allow-Methods|

|  maxAge  | long | 类或接口 | 否 | Access-Control-Max-Age |

| allowCredentials  |String | 类或接口 | 否 | Access-Control-Allow-Credentials |

| allowedHeaders  | String数组 | 类或接口 | 否 | Access-Control-Request-Headers |

|  exposedHeaders  | String数组  | 类或接口 | 否 | Access-Control-Expose-Headers |

备注说明

value、origins属性:配置允许访问的源,如: http://anxminise.cc,*表示允许全部的域名

methods属性:配置跨域请求支持的方式,如:GET、POST,且一次性返回全部支持的方式

maxAge属性:配置预检请求的有效时间, 单位是秒,表示:在多长时间内,不需要发出第二次预检请求

allowCredentials属性:配置是否允许发送Cookie,用于 凭证请求, 默认不发送cookie

allowedHeaders属性:配置允许的自定义请求头,用于 预检请求

exposedHeaders属性:配置响应的头信息, 在其中可以设置其他的头信息,不进行配置时, 默认可以获取到Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma字段


第二种: 使用WebMvcConfigurer对象

代码实例


@Configuration

public class MyConfiguration {

    @Bean

    public WebMvcConfigurer corsConfigurer() {

        return new WebMvcConfigurer() {

            @Override

            public void addCorsMappings(CorsRegistry registry) {

                registry.addMapping("/api/**")

                          .allowedOrigins("*") 

                          .allowCredentials(true)

                          .allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")

                          .maxAge(3600); 

            }

        };

    }

}


其中,通过相应的方法实现跨域请求的配置

| 方法类 |方法名称| 必填  | 请求头字段 |说明 |

|:-------:|:-------------:|:-----:|:-----:|:-----:|

| CorsRegistry  |addMapping | 是 |  无, 非Cors属性, 属于SpringBoot配置 |配置支持跨域的路径|

| CorsRegistration  |allowedOrigins | 是 | Access-Control-Allow-Origin |配置允许的源|

| CorsRegistration  | allowedMethods | 是 |Access-Control-Allow-Methods| 配置支持跨域请求的方法, 如:GET、POST,一次性返回|

| CorsRegistration  | maxAge | 否 | Access-Control-Max-Age | 配置预检请求的有效时间 |

| CorsRegistration  |allowCredentials | 否 | Access-Control-Allow-Credentials | 配置是否允许发送Cookie, 用于 凭证请求 |

| CorsRegistration  | allowedHeaders | 否 | Access-Control-Request-Headers | 配置允许的自定义请求头, 用于 预检请求 |

| CorsRegistration  | exposedHeaders  | 否 | Access-Control-Expose-Headers | 配置响应的头信息, 在其中可以设置其他的头信息 |

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容