安全驗(yàn)證中token如何放在請求頭中傳輸?shù)慕鉀Q方法
前幾天做flutter項(xiàng)目的時(shí)候網(wǎng)絡(luò)請求都沒有問題妆艘,封裝網(wǎng)絡(luò)請求什么都o(jì)k,都是用的開源的api植康,想著用到實(shí)戰(zhàn)中吧旷太,就把現(xiàn)有的項(xiàng)目直接調(diào)用試試,發(fā)現(xiàn)一直都是token失效销睁,獲取不到最新的token供璧,debug一圈之后發(fā)現(xiàn)獲取token的請求,返回提的header中的請求頭和傳遞過去的基本上一樣冻记,后臺返回來的token沒有獲取到睡毒,或者說根本就沒有這個(gè)字段,一直在考慮是哪里封裝的有問題冗栗?畢竟是新的東西剛接觸不就嘛演顾,一直找問題,扒博客隅居,發(fā)現(xiàn)一個(gè)詞 “跨域”钠至,就開始找扒拉,發(fā)現(xiàn)有一篇文章有提到摘抄記錄整理一下胎源。
問題所在:在網(wǎng)上扒了半天博客棉钧,發(fā)現(xiàn)問題出在后端,沒錯(cuò)這是一個(gè)后端問題涕蚤。因?yàn)榭缬蛳芮洌笈_就不會(huì)接收一切非官方的請求頭,而前端也無法獲取一切非官方的響應(yīng)頭万栅。解決辦法很簡單佑钾,后臺只需要對請求頭和響應(yīng)頭的自定義字段進(jìn)行聲明就行了。
代碼:后臺代碼其實(shí)是不一樣的申钩,我們后臺使用了spring boot框架次绘,所以是這種寫法。
? corsConfiguration.addAllowedOrigin("*");?//?1?設(shè)置訪問源地址 ????????
? corsConfiguration.addAllowedHeader("token");?//?2?設(shè)置訪問源請求頭 ??corsConfiguration.addAllowedMethod("POST,GET");?//?3?設(shè)置訪問源請求方法 ????????
? corsConfiguration.setMaxAge(1800000L);//間隔30分鐘驗(yàn)證一次是否允許跨域
response.setHeader("Access-Control-Expose-Headers","Cache-Control,Content-Type,Expires,Pragma,Content-Language,Last-Modified,token");
response.setHeader("token", JwtToken.createToken(user.getId())); //設(shè)置響應(yīng)頭
注意第二段代碼標(biāo)紅的那句撒遣,網(wǎng)上很多教程都寫的是access-control-allow-headers邮偎,這其實(shí)是錯(cuò)的。
這個(gè)問題雖然是一個(gè)后臺問題义黎,但是在前后端交互過程中發(fā)現(xiàn)的禾进,并且我一度認(rèn)為是我的問題。所以把它記錄了下來廉涕,也算是見證我的成長吧泻云。
發(fā)不出來讓看到的朋友們艇拍,尤其是沒有后臺基礎(chǔ)或者flutter剛接觸的人提個(gè)醒,不需要糾結(jié)宠纯,也可以節(jié)省不少時(shí)間