2017-10-12 4 views
0

J'ai déployé localement mon application Play et l'accès à mon API REST via localhost:9000 à partir de mon navigateur fonctionne parfaitement.Lecture CORS ne fonctionne pas

Cependant, je reçois l'erreur suivante lors de l'exécution d'un script jQuery (voir ci-dessous) de file:///C:/Users/XXX/XXX//index.html:

Failed to load resource: the server responded with a status of 403 (Forbidden) 

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403. 

J'ai suivi les instructions données sous https://www.playframework.com/documentation/2.6.x/CorsFilter.

Mon build.sbt:

libraryDependencies ++= Seq(
    jdbc, 
    evolutions, 
    guice, 
    "com.h2database" % "h2" % "1.4.194", 
    javaJpa, 
    "org.hibernate" % "hibernate-core" % "5.2.5.Final", 
    filters 
) 

Mon application.conf:

NOTE: J'ai essayé deux allowedOrigins = null & allowedOrigins = ["*"]

jQuery script:

$.ajax({ 

    'url' : 'http://localhost:9000/employee/' + user_id + '/weeklyWorkingHours', 
    'type' : 'GET', 
    'success' : function(data) { 
     console.log('Data: '+ JSON.stringify(data)); 

    }, 
    'error' : function(request,error) 
    { 
     console.log("Error: "+JSON.stringify(request)); 
    } 
}); 

Voici ce que dit Jouer:

[warn] p.f.c.CORSFilter - Invalid CORS request;Origin=Some(null);Method=GET;Access-Control-Request-Headers=None 
+0

spécifications Play dit que 'par défaut, toutes les origines sont autorisée de. Vous mentionnez que vous avez essayé 'allowedOrigins = null' &' allowedOrigins = ["*"] '. Avez-vous essayé de l'enlever? – Bruno

+0

Merci pour l'indice. Malheureusement, cela ne fait pas l'affaire. – mollwitz

+0

Je pense que le problème est ici 'Origin = Some (null)'. Play validera ceci comme 'isValidOrigin = nouvel URI (" null "). GetScheme ne null'. Ce qui renvoie faux. Pouvez-vous essayer de faire la demande avec un 'Origin' valide? C'est 'Origin = '? – Bruno

Répondre

2

Vous ne pourrez pas utiliser CORS à partir d'un fichier local. Le navigateur envoie une valeur d'en-tête origin null au serveur et Play ne répond pas avec un en-tête access-control-allow-origin. Pour les tests, vous pouvez configurer un serveur web local, par exemple avec

cd c:\Users\XXX\XXX 
python -m SimpleHTTPServer 

Ensuite, vous pouvez charger votre fichier

http://localhost:8000/index.html

+0

Merci pour votre réponse.N'est-il pas possible de configurer Play de telle sorte que les valeurs nulles soient également acceptées? Je pense que CORS ne fonctionne toujours pas comme prévu, car avec un plugin chrome pour CORS (https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi), je peux appeler localhost à partir d'un fichier local . – mollwitz

+0

Je n'ai pas trouvé un moyen de configurer Play comme ça et j'ai lu suffisamment de code source pour que je ne pense pas qu'il existe une provision pour cela. Cette extension ne modifie pas l'en-tête 'origin', donc vous n'aurez pas de bonheur avec Play. Assurez-vous de surveiller cet en-tête avec les outils de développement. Essayez le serveur Web local. – cayhorstmann

1

essayer de mettre cela en application.conf (il permettra à toutes les origines)

play.filters.cors.allowedOrigins = null 

et ne désactive pas CORS filtre

play.filters.enabled += "play.filters.cors.CORSFilter" 
+0

Malheureusement, cela ne résout pas le problème. En tout cas merci! – mollwitz

+0

ok alors play.filters.cors.allowedOrigins = ["http: // localhost: 9000"] – cutoffurmind

+0

Ne fonctionne pas non plus parce que j'accède à mon service REST à partir d'un domaine différent – mollwitz