Аннотация контроллера Spring CORS не работает

Я хочу разрешить запросы перекрестного происхождения для одного домена. В моем проекте используется 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>

Ни с одним из методов ответ, похоже, не содержит ничего похожего на 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

Я не использую весеннюю загрузку и полагаю, что пропустил шаг настройки.


person ilinca    schedule 21.08.2015    source источник
comment
Я также пытался использовать @RestController вместо @Controller, но, похоже, это не имело никакого значения для заголовков.   -  person ilinca    schedule 21.08.2015
comment
вы пробовали с другого домена? Если запрос не является перекрестным, то я не понимаю, почему сервер должен добавлять заголовки CORS в ответ.   -  person Brian Clozel    schedule 21.08.2015
comment
Удалось ли вам как-то ее решить? У меня такая же проблема.   -  person Serg Derbst    schedule 01.12.2015
comment
@SergDerbst Мне не удалось использовать аннотации Spring CORS. Вместо этого я использовал веб-фильтр Spring (web.xml) и расширил для него org.springframework.web.filter.OncePerRequestFilter. Это сработало с первой попытки.   -  person ilinca    schedule 01.12.2015
comment
Спасибо. У меня тоже не получается. Я попробую еще раз позже на этой неделе, поэтому, если у меня все получится, я дам вам знать.   -  person Serg Derbst    schedule 01.12.2015
comment
Лучший ответ, который я нашел, связан с вашим вопросом: stackoverflow.com/a/31748398/582789 с предложением использовать software.dzhuvinov.com/cors-filter.html   -  person Alfonso Nishikawa    schedule 14.06.2016


Ответы (2)


Я воспроизвел эту проблему для себя. Проблема возникает, когда у меня нет аннотации @EnableWebMvc в моем аннотированном классе @Configuration. Я сообщил об этой проблеме как об ошибке в Sping Jira с подробностями: https://jira.spring.io/browse/SPR-13857

Я вижу исправление либо в коде, либо в документации. Исправление документации будет состоять в том, чтобы указать в javadoc класса @CrossOrigin, что @EnableWebMvc требуется, но я бы предпочел исправление в коде, чтобы аннотация cors работала без @EnableWebMvc.

person Aleksey Korolev    schedule 11.01.2016
comment
я пробовал использовать @EnableWebMvc, но все еще не работает :( - person Emanuele Righetto; 25.03.2016

Не могли бы вы попробовать с "http://fiddle.jshell.net" вместо "http://fiddle.jshell.net/"?

person Sébastien Deleuze    schedule 21.08.2015
comment
Я только что попробовал и до сих пор не вижу материала CORS в заголовке. Для справки, я тестировал как из jsfiddle, так и из браузера. - person ilinca; 24.08.2015
comment
Не могли бы вы предоставить простой проект, который воспроизводит эту проблему, и я посмотрю. - person Sébastien Deleuze; 24.08.2015