2015-08-21 6 views
6

Desidero consentire le richieste di origine incrociata per un dominio. Il mio progetto utilizza Spring, quindi voglio approfittare del nuovo supporto CORS.L'annotazione del regolatore CORS molla non funziona

Sto usando la versione 4.2.0 per tutte le dipendenze springframework.

Ho seguito l'esempio qui https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#disqus_thread e ho provato la prima versione. Le mie annotazioni del controller appare come:

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

se ho capito bene il MVC-config è un metodo alternativo. Ho provato così:

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

Con entrambi i metodi, la risposta non sembra contenere qualcosa di simile Access-Control-Allow-Origin, né posso ottenere un risultato indietro attraverso una semplice query da jsfiddle.

Le informazioni di intestazione degli strumenti di sviluppo di Chrome, quando eseguite e accessibili da localhost sono sotto. In questo caso la richiesta proviene dallo stesso dominio e non tramite javascript, ma pensavo che l'annotazione CORS avrebbe comunque aggiunto i parametri di controllo dell'accesso?

intestazioni di risposta:

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

Richiesta Intestazione:

 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 

Non faccio uso di avvio primavera e presumo ho perso un passo di configurazione.

+0

Ho anche provato a usare '@ RestController' invece di' @ Controller' ma non sembrava fare alcuna differenza per le intestazioni. – ilinca

+0

hai provato da un altro dominio? Se la richiesta non è di origine incrociata, non vedo perché il server deve aggiungere intestazioni CORS nella risposta –

+0

Sei riuscito a risolverlo in qualche modo? Sto avendo lo stesso problema. –

risposta

0

Provare con "http://fiddle.jshell.net" anziché "http://fiddle.jshell.net/"?

+0

Ho appena provato e ancora non vedo il materiale CORS nell'intestazione. Solo per la cronaca, ho provato sia da jsfiddle che dal browser. – ilinca

+0

Potresti fornire un semplice progetto che riproduca questo problema, e darò un'occhiata. –

2

Ho riprodotto questo problema per me stesso. Il problema si verifica quando non ho annotazioni @EnableWebMvc nella mia classe annotata @Configuration. Ho segnalato questo problema come un bug in Sping Jira con i dettagli dietro: https://jira.spring.io/browse/SPR-13857

Vedo la correzione nel codice o nella documentazione. La correzione della documentazione sarebbe di dichiarare nella classe @CrossOrigin javadoc che @EnableWebMvc è richiesto, ma preferirei la correzione nel codice in modo che l'annotazione cors funzioni senza @EnableWebMvc.

+1

ho provato a utilizzare @EnableWebMvc ma ancora non funziona :( –

+0

la mia configurazione non ha funzionato fino a quando non ho aggiunto l'annotazione EnableWebMvc ... –

Problemi correlati