我正在使用嵌入式Jetty的項目(不幸的是我只是「繼承」了項目的服務器端,並且不太熟悉Jetty及其配置的使用)。如何配置嵌入式Jetty來處理OPTIONS預檢請求?
一個奇怪的情況下,只需彈出 - 我會盡我所能來形容:
一個基於Web的用戶界面(使用AngularJS,從不同的域,因此使用CORS)發送POST請求改變服務器上的某種狀態。這在過去的某個時刻起作用(它可能在一個月左右之前被最後使用)。
昨天這停止工作。檢查REST調用,我看到OPTIONS請求首先被創建。 POST的內容類型是application/json,所以根據我讀過的內容,這是正確的。我不知道爲什麼以前沒有發送過 - 這家公司最近更新了Chrome版本,舊版本沒有發送預檢請求,但這只是猜測。在任何情況下,這裏就是我想在我的應用程序配置爲碼頭CORS相關代碼:
FilterHolder holder = new FilterHolder(new CrossOriginFilter());
holder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
holder.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_CREDENTIALS_HEADER, "true");
appHandler.addFilter(holder, "/*", EnumSet.of(DispatcherType.REQUEST));
一切正常POST請求。我可以通過使用--disable-web-security標誌啓動Chrome來驗證這一點。沒有發送OPTIONS請求,並且POST正常工作。
我的想法是,因爲它適用於POST,它不是授權或安全問題 - 只是Jetty沒有正確配置來處理預檢請求(它只返回401)。
我無法找到嵌入式Jetty的許多文檔,以及哪些CrossOriginFilter常量在調用setInitParameter時用作屬性鍵(此外,由於該方法調用的第二個參數是字符串,所以我確實有不知道如何格式化值)。
我應該在CrossOriginFilter上將哪些參數設置爲屬性句柄OPTIONS請求?如果我在上面說錯了或者做了任何錯誤的假設,請糾正我!這方面的經驗非常有限。
你解決了這個問題嗎?如果是,請在此提供答案? – sag 2015-10-07 12:55:35