遇到一個(gè)特別蛋疼的問題,后臺始終無法獲取前端傳入的自定義header组力,從下午搞到晚上3點(diǎn)尺棋,試了各種前端方式翁垂,什么加contenType Access-Control-Allow-Origin 等等 配置header的 都沒有用琳状,最后終于把最終的原因找到了磕瓷。
首先了解一個(gè)知識點(diǎn):過濾器如果發(fā)現(xiàn)是cors跨域復(fù)雜請求會先發(fā)送一個(gè)方法為OPTIONS的預(yù)檢請求,這個(gè)請求是用來驗(yàn)證本次請求是否安全的。
所以這就是問題的所在:第一次去判斷header是否存在的時(shí)候困食,并不是前端傳過來的請求边翁,而是這次OPTIONS的預(yù)檢請求,所以當(dāng)然header始終為空八俄铩符匾!
解決方法
后端進(jìn)行判斷 判斷是否為OPTIONS請求,如果是則直接跳過這次請求就好瘩例。
if ("OPTIONS".equals(request.getMethod())) {
return true;
}
注:這種跨域請求的一般都是后端來搞定待讳,謹(jǐn)記我們不用搞,第一次記錄一下仰剿,為后續(xù)人員提個(gè)建議,自信就好