2015-08-21 17 views
6

Chcę zezwolić na żądania różnych źródeł dla jednej domeny. Mój projekt wykorzystuje Spring, więc chcę skorzystać z nowego wsparcia CORS.Adnotacja kontrolera Spring CORS nie działa

Używam wersji 4.2.0 dla wszystkich zależności springframework.

Podążyłem za przykładem tutaj https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#disqus_thread i wypróbowałem pierwszą wersję. Adnotacje kontrolera wyglądają następująco:

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

Jeśli dobrze rozumiem, mvc-config jest alternatywną metodą. Próbowałem również:

<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> 

albo metod, odpowiedź wydaje się nie zawierać niczego podobnego Access-Control-Allow-Origin, nie mogę uzyskać wynik z powrotem za pomocą prostego zapytania z jsfiddle.

Informacje o nagłówku z narzędzi dla programistów Chrome po uruchomieniu i uzyskaniu dostępu z hosta lokalnego znajdują się poniżej. W tym przypadku żądanie pochodzi z tej samej domeny, a nie z javascript, ale myślałem, że adnotacja CORS i tak doda parametry kontroli dostępu?

Response Nagłówki:

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

Zapytanie Header:

 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 

nie używam bagażnik sprężyny i przypuszczam, brakowało mi krok konfiguracji.

+0

Próbowałem również użyć '@ RestController' zamiast' @ Controller', ale nie wydawało się to żadnego znaczenia dla nagłówków. – ilinca

+0

Czy próbowałeś z innej domeny? Jeśli żądanie nie jest pochodzenia krzyżowego, to nie widzę powodu, dla którego serwer powinien dodać nagłówki CORS w odpowiedzi –

+0

Czy udało Ci się jakoś go rozwiązać? Mam ten sam problem. –

Odpowiedz

0

Czy możesz spróbować z "http://fiddle.jshell.net" zamiast "http://fiddle.jshell.net/"?

+0

Po prostu wypróbowałem to i nadal nie widzisz rzeczy CORS w nagłówku. Dla porównania przetestowałem zarówno z jsfiddle, jak i zwykłego z przeglądarki. – ilinca

+0

Proszę o przedstawienie prostego projektu, który powiela ten problem, a ja przyjrzę mu się. –

2

Powieliłem ten problem dla siebie. Problem występuje, gdy nie mam adnotacji @EnableWebMvc w mojej adnotowanej klasie @Configuration. Zgłosiłem ten problem jako błąd w Sping Jira ze szczegółami: https://jira.spring.io/browse/SPR-13857

Widzę poprawkę w kodzie lub w dokumentacji. Naprawę dokumentacji byłoby stwierdzenie w javadoc klasy @CrossOrigin, że wymagane jest @EnableWebMvc, ale wolę poprawkę w kodzie, aby adnotacja cors działała bez @EnableWebMvc.

+1

Próbowałem używać @EnableWebMvc, ale nadal nie działa :( –

+0

moja konfiguracja nie działała, dopóki nie dodałem adnotacji EnableWebMvc ... –

Powiązane problemy