12
votes

Activer la demande Cors Post de Angularjs à Jersey

Je tente de poster un document JSON d'une application Angularjs à un service de repos en maillot. La demande échoue, m'informant que:

xmlhttprequest ne peut pas charger http: // localhost: 8080 / my.Rest.Service / API / Commander / AddDon. Aucune en-tête «Access-Control-Control-Autory-Origin» est présente sur la ressource demandée. Origine 'http: // localhost' n'est donc pas autorisé à accéder. Code> p>

la fonction de post de jersey h2>

J'ai activé (ce que je crois être) les en-têtes appropriés: Access-Control-Autory-Origine Code> et Access-Control-Abed-Abed-Méthodes Code> sur la réponse, comme indiqué dans la méthode ci-dessous: P>

myApp.controller('orderListCtrl', function ($scope, $http){
    $http.get('http://localhost:8080/my.rest.service/api/order/listall').success(function(data) {
        for (var i = 0; i < data.length; i++) {
            if (data[i].description.length > 200) {
                data[i].shortDesc = data[i].description.substring(0,196) + "...";
            } else {
                data[i].shortDesc = data[i].description;
            }
        };
        $scope.orders = data;
    });
});


0 commentaires

4 Réponses :


0
votes

J'avais fait face à une erreur de Cors similaire tout en appelant mon service reposant (mis en œuvre dans Java - Jersey) de Angularjs. Pour résoudre ce problème, j'ai ajouté d'accès à l'accès à l'accès à l'accès: * strong> en en-tête de réponse. J'ai ajouté ci-dessous:

response.addHeader("Access-Control-Allow-Origin", "*"); 


2 commentaires

Que proposez-vous que l'objet de réponse est dans votre code ci-dessus? Et cela est-il fonctionnellement différent d'inclure le même en-tête de réponse dans le constructeur de réponses?


Cela a fonctionné pour moi lorsque j'ai ajouté uniquement "l'accès-contrôle-contrôle-origine", "*" Dans la réponse du site Web de repos. Je peux voir que vous l'avez déjà défini en réponse. S'il vous plaît essayez d'exécuter votre code sur la même adresse IP et le même port, vous savez donc bien qu'il n'y a pas de problème dans le code angulaire.



8
votes

Le problème s'est avéré être une manipulation inadéquate de la demande d'options envoyée en pré-vol avant la demande de poste avec les en-têtes d'origine croisée appropriés.

J'ai pu résoudre le problème en téléchargeant et en implémentant le filtre Cors trouvé sur cette page: http: // logiciel.dzhuvinov.com/cors-filter-installation.html .

Si vous rencontrez un problème similaire, suivez les instructions et le test pour voir que votre demande d'options n'est plus défaillante et est immédiatement suivie de votre demande réussie.


0 commentaires

2
votes

Le meilleur moyen est d'ajouter un filtre de réponse en maillot qui ajoutera les en-têtes Cors pour toutes les méthodes. Vous n'avez pas besoin de changer votre implémentation de service Web.

Je vais expliquer pour Jersey 2.x P>

1) Ajoutez d'abord un répondeur de réponse comme indiqué ci-dessous P>

    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>YOUR PACKAGE.CorsResponseFilter</param-value>
    </init-param>


0 commentaires

0
votes

En réalité, vous avez une autre solution qui n'a pas besoin d'un filtre. Ajout du Access-Control-Autoriser - * Les en-têtes de la requête Get ne sont pas suffisants, vous devez créer une option Options OPTION pour autoriser les navigateurs Faites la demande de pré-vol, c'est-à-dire: xxx

voir https://kdecherf.com/blog/2011/06/19/java-jersey-a-cors-commant-Rest-api/ pour référence .


0 commentaires