原本使用HtppClicent類去做的跨域處理 , 但是我自己的HttpClicent工具類寫的不是很完善 , 重載了三類方法:參數只有url , 參數為url+請求參數 , 參數為 url+請求參數+請求頭 , 雖然我的請求參數使用Map<Strting,Object> , 但是這個Object去沒有考慮傳入參數為數組或者集合的情況 , 所以在今天做批量的文件上傳時,應為工具類不能正常處理文件數組 ,所以使用了mvc去配置跨域 , 剛開始就想着為了開發方便,配置允許所有請求跨域,具體配置如下:
<mvc:cors>
<mapping path = "/*" />
<mvc:cors>
啟動jetty沒有任何報錯,去頁面刷新效果 , 結果ajax在執行完之后卻直接執行error,不執行success,看一下控制台沒有任何報錯,在看一下瀏覽器的響應數據,數據也過來了 , 看一下后台數據庫數據也更新了,就感覺懵了 ...
沒有辦法就在Controller中請求方法上使用了@ CrossOrigin注解 , 試了下 , 一切都正常了 ...
到這里就懵了 , @CrossOrigin注解可以,為什么配置不行,而且配置的后台是沒有問題的 , 前端代碼如下:
$.ajax({ type : "post", async :false, url : "http://****, data : fd, datatype: "json", contentType : false, processData : false, success : function() { window.location.href = "****" }, error:function(e) { layer.msg("數據上傳失敗",{time:2000,icon:2,shift:6},function(){ console.log(e); }); } })
看半天沒找到錯誤 , 突然發現自己有點南轅北轍了,既然@CrossOrigin是正常的,那么前端代碼就沒有問題才對,所以問題定在了mvc中跨域的配置 , 又想到瀏覽器控制台的報錯,同源策略拒絕了訪問,雖然跨域成功了,但是這個跨域一定是有問題的,看了一眼mvc中的配置...
<mvc:cros >
<mapping path = "/*">
<mvc:cros/>
... /* 是/* ,醉了 , 這個/*是可以跨域的,但是ajax是獲取不到響應頭的...
改為/** , 一切正常... 特發此文紀警示:寫代碼是一件很認真很認真的事...