2015-08-21 31 views
6

我想允許一個域的跨源請求。我的項目使用Spring,所以我想利用新的CORS支持。Spring CORS控制器註釋不起作用

對於所有springframework依賴關係,我正在使用版本4.2.0

我跟着這裏的例子https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#disqus_thread並嘗試了第一個版本。我的控制器註釋如下所示:

@CrossOrigin(origins = "http://fiddle.jshell.net/", maxAge = 3600) 
@Controller 
@RequestMapping("/rest") 
public class MyController 

如果我理解正確,mvc-config是一種替代方法。我試了一下,以及:

<mvc:cors> 
    <mvc:mapping path="/**" 
     allowed-origins="http://fiddle.jshell.net/, http://domain2.com" 
     allowed-methods="GET, PUT" 
     allowed-headers="header1, header2, header3" 
     exposed-headers="header1, header2" allow-credentials="false" 
     max-age="123" />  
</mvc:cors> 

無論使用哪種方法,響應似乎並不包含類似Access-Control-Allow-Origin什麼,無論是我能得到一個結果回通過從的jsfiddle一個簡單的查詢。

從本地主機運行並訪問時,來自Chrome開發人員工具的標頭信息如下。在這種情況下,請求來自同一個域,而不是通過javascript,但我認爲CORS註釋會添加訪問控制參數?

響應頭:

Content-Length:174869 
Content-Type:text/html;charset=UTF-8 
Date:Fri, 21 Aug 2015 12:21:09 GMT 
Server:Apache-Coyote/1.1 

請求頭:

 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*\/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,ro;q=0.6,de;q=0.4,fr;q=0.2 
Cache-Control:no-cache 
Connection:keep-alive 
Cookie:JSESSIONID=831EBC138D2B7E176DF4945ADA05CAC1;_ga=GA1.1.1046500342.1404228238; undefined=0 
Host:localhost:8080 
Pragma:no-cache 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0(Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 

我不使用彈簧引導和我相信我錯過了配置步驟。

+0

我也嘗試使用'@ RestController'而不是'@ Controller',但它似乎沒有對標題做任何改變。 – ilinca

+0

你有沒有嘗試從另一個域?如果請求不是跨源的,那麼我不明白爲什麼服務器應該在響應中添加CORS頭文件 –

+0

你能以某種方式解決它嗎?我有同樣的問題。 –

回答

0

你可以試用"http://fiddle.jshell.net"而不是"http://fiddle.jshell.net/"

+0

我剛試過&仍然沒有看到標題中的CORS的東西。爲了記錄,我從瀏覽器的jsfiddle和plain中都測試過。 – ilinca

+0

你能否提供一個簡單的項目來重現這個問題,我會看看。 –

2

我已經爲自己轉載了這個問題。當我在@Configuration註釋類中沒有@EnableWebMvc註釋時,會發生問題。 我已經報告了這個問題作爲Sping Jira中的一個錯誤,其背後的細節:https://jira.spring.io/browse/SPR-13857

我在代碼或文檔中看到修復程序。文檔修復將在@CrossOrigin類javadoc中聲明@EnableWebMvc是必需的,但我更喜歡代碼中的修復,以便Cors註釋在沒有@EnableWebMvc的情況下工作。

+1

我已經嘗試使用@EnableWebMvc,但仍然無法正常工作:( –

+0

我的配置在我添加了EnableWebMvc註釋之前無法使用... –