Spring CORS控制器注释无法正常工作

时间:2015-08-21 12:47:29

标签: spring spring-mvc cors spring-web

我想允许一个域的跨域请求。我的项目使用Spring,所以我想利用新的CORS支持。

我对所有4.2.0个依赖项使用版本springframework

我按照这里的示例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>

使用任何一种方法,Response似乎都不包含Access-Control-Allow-Origin之类的内容,也不能通过jsfiddle的简单查询得到结果。

Chrome开发者工具的标题信息在运行和从localhost访问时如下所示。在这种情况下,请求来自同一个域,而不是通过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

我不使用弹簧靴,我认为我错过了配置步骤。

2 个答案:

答案 0 :(得分:2)

我为自己重现了这个问题。当我在@Configuration注释类中没有@EnableWebMvc注释时,就会出现问题。 我已将此问题报告为Sping Jira中的一个错误,其中包含详细信息:https://jira.spring.io/browse/SPR-13857

我在代码或文档中看到了修复。文档修复将在@CrossOrigin类javadoc中声明需要@EnableWebMvc,但我更喜欢代码中的修复,以便cors注释在没有@EnableWebMvc的情况下工作。

答案 1 :(得分:0)

您可以尝试使用"http://fiddle.jshell.net"代替"http://fiddle.jshell.net/"吗?