2016-08-12 267 views
0

我正在使用simpleCORSFilter.java處理CORS請求,該請求對其他請求正常工作,但不知何故,它不適用於AJAX POST請求。Ajax不接受CORS(飛行前檢查)響應

simpleCORSFilter.java

@Component 
public class SimpleCORSFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
      throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 

     response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin,X-Requested-With,X-Requested-by, Content-Type, Accept,Session"); 
     response.setHeader("Access-Control-Expose-Headers", "Location"); 
     chain.doFilter(req, res); 
    } 

Ajax請求

$.ajax({ 
     url: url, 
     dataType: 'json', 
     type: 'POST', 
     contentType: 'application/json; charset=UTF-8', 
     crossDomain: true, 
     data: JSON.stringify(data), 
     success: function (data) { 
        console.log(' data : '+data); 

       }, 
     error: function(jqXHR, textStatus, errorThrown) { 
        console.log('jqXHR:'); 
        console.log(jqXHR); 
        console.log('textStatus:'); 
        console.log(textStatus); 
        console.log('errorThrown:'); 
        console.log(errorThrown); 
       } 
      }); 

發送它只是停止工作的預檢響應後(不關閉服務器,但它是像剛纔掛在那裏沒有任何反應) ,如果我試圖請求其他任何東西,那麼它將打破連接並響應以下內容

Caused by: java.io.IOException: An established connection was aborted by the software in your host machine 

服務器日誌:

---------------------------- 
ID: 1 
Address: http://localhost:9092/services/searchCMS/ 
Encoding: UTF-8 
Http-Method: OPTIONS 
Content-Type: 
Headers: {Accept=[*/*], accept-encoding=[gzip, deflate, sdch], accept-language=[en-US,en;q=0.8], access-control-request-headers=[content-type], access-control-request-method=[POST], connection=[keep-alive], Content-Type=[null], dnt=[1], host=[localhost:9092], origin=[http://localhost:3000], referer=[http://localhost:3000/report], user-agent=[Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36]} 
-------------------------------------- 
2016-08-12 09:50:48.912 INFO 6408 --- [nio-9092-exec-1] o.a.c.interceptor.LoggingOutInterceptor : Outbound Message 
--------------------------- 
ID: 1 
Response-Code: 200 
Content-Type: text/xml 
Headers: {Allow=[POST, GET, PUT, OPTIONS, HEAD], Date=[Fri, 12 Aug 2016 07:50:48 GMT], Content-Length=[0]} 
-------------------------------------- 

我不明白的地方恰恰是問題,阿賈克斯部分或Web服務的一部分? 我已經閱讀了很多博客和stackoverflow的答案,但我無法解決這個問題。它只是從Web服務獲得預檢響應之後引發錯誤。我不知道爲什麼?可能是我錯過了一些東西,你可以指出這一點。

回答

0

我在點擊按鈕時調用了這個Ajax請求,但是我忘記了返回該點擊事件。我發現這個解決方案here

解決方案1:您可以點擊返回false()函數

return false ; // for onClick funciton 

解決方案2:您可以防止使用默認值

e.preventDefault();  // e is the onclick event parameter