springboot cors跨域问题,为什么用interceptor拦截部到OPTIONS请求?

springboot cors跨域问题,为什么用interceptor拦截部到OPTIONS请求?

关于什么是cors就不多说了,有很多不错的文章

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/AccesscontrolCORS

https://www.cnblogs.com/yuansc/p/9076604.html

笔者并没有完全用网上提供的方法来处理。没有用springboot默认支持的cors的处理办法。 而是选择用spring的拦截器来拦截OPTIONS请求。

在拦截器的preHandle方法中对OPTIONS请求做了拦截处理,判断如果是OPTIONS请求就会设置响应的响应头

经过测试拦截器拦截不到OPTIONS请求,换句话说就是OPTIONS请求还没走到拦截器就返回了。 

这里就需要了解一下一个请求到拦截器经历了哪些步骤,OPTIONS请求是在那一步就返回了。

大概的步骤如下

request ---> filter(过滤器)----> dispatcherservelet的doservice方法 ----> interceptoor拦截器

既然请求没走到拦截器,我没有没有写过滤器,所以肯定是在doservice方法或者在filter到doservice方法之间就被返回了。

带着问题来看源码,我们来找到服务器容器是在那里处理OPTIONS请求的

于是找到了FrameworkServlet类中有一个doOptions方法,实际上这个方法的调用是在dispatcherservlet的doservice方法之前的,调用processRequest(request, response);方法才会走到doservice方法。


这个方法里判断了 this.dispatchOptionsRequest || CorsUtils.isPreFlightRequest(request)


this.dispatchOptionsRequest默认是false的,所以来看CorsUtils.isPreFlightRequest(request)

这个方法又会调用三个判断条件 其中:

- isCorsRequest方法如下:就判断了request的消息头中是否包含orgin这个消息头 


 - HttpMethod.OPTIONS.matches(request.getMethod())判断这个请求是否是OPTIONS请求

- request.getHeader(HttpHeaders.ACCESSCONTROLREQUEST_METHOD) != null就更直观,直接判断消息头是否有Access-Control-Request-Method这个消息头 


所以现在问题就是是否这三个条件都满足,CorsUtils.isPreFlightRequest(request)返回结果为true,才会走到doservice方法。

经排查,是因为前端没有设置orgin和Access-Control-Request-Method这两个消息头 设置上这两个消息头就可以顺利走到拦截器,并且成功设置cors消息头

问题到这里就解决的,但是其实如果一开始就在过滤器filter中来处理,就不会有这个问题了。doOptions方法是在拦截器之后的。无论设不设消息头都可以成功设置消息头

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

推荐阅读更多精彩内容