Comment gérer les catégories de documents à l'aide de JAX-RS avec Jersey
Je suis le développement d'un script java de l'application client, côté serveur j'ai besoin de manipuler des CORS, tous les services que j'avais écrit dans JAX-RS avec JERSEY.
Mon code:
@CrossOriginResourceSharing(allowAllOrigins = true)
@GET
@Path("/readOthersCalendar")
@Produces("application/json")
public Response readOthersCalendar(String dataJson) throws Exception {
//my code. Edited by gimbal2 to fix formatting
return Response.status(status).entity(jsonResponse).header("Access-Control-Allow-Origin", "*").build();
}
Comme de maintenant, je me fais Pas d'erreur "Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. Origine " http://localhost:8080 ' est donc pas autorisé à accéder.”
S'il vous plaît aider moi.
Merci & ce qui Concerne
Bouddha Puneeth
- Juste pour info, j'ai été à l'aide de jax-rs jersey 2 et j'avais besoin de permettre à toutes les demandes de mes RestApi. stackoverflow.com/questions/24386712/tomcat-cors-filter La réponse de Krizka a aidé à résoudre mon problème très facilement, comme je l'ai configuré le web.xml dans mon répertoire de tomcat (apache tomcat 8). A l'aide angulaire de 6 à en faire la demande à mon api.
Vous devez vous connecter pour publier un commentaire.
@CrossOriginResourceSharing
est un CXF d'annotation, de sorte qu'il ne fonctionne pas avec Jersey.Avec Jersey, pour traiter les CORS, j'ai l'habitude de simplement utiliser un
ContainerResponseFilter
. LeContainerResponseFilter
pour Maillot 1 et 2 sont un peu différentes. Puisque vous n'avez pas mentionné la version que vous utilisez, je vais poster deux à la fois.Jersey 2
Si vous utilisez le package de numérisation de découvrir les fournisseurs et les ressources, la
@Provider
annotation devrait prendre soin de la configuration pour vous. Si pas, alors vous aurez besoin d'inscrire explicitement avec laResourceConfig
ou laApplication
sous-classe.Exemple de code à inscrire explicitement filtre avec le
ResourceConfig
:Maillot 1
web.xml de configuration, vous pouvez utiliser
Ou
ResourceConfig
vous pouvez faireOu le paquet de la numérisation avec le
@Provider
annotation.MODIFIER
Veuillez noter que l'exemple ci-dessus peut être amélioré. Vous aurez besoin d'en savoir plus sur la façon de la SCRO œuvres. Veuillez voir ici. Pour un, vous obtiendrez les en-têtes pour toutes les réponses. Cela peut ne pas être souhaitable. Vous aurez juste besoin de gérer le contrôle en amont (ou des OPTIONS). Si vous voulez voir une meilleure mise en œuvre de la SCRO filtre, vous pouvez consulter le code source de la RESTeasy
CorsFilter
Mise à JOUR
J'ai donc décidé d'ajouter un plus à leur application correcte. Ci-dessus la mise en œuvre est paresseux et ajoute tous les CORS des en-têtes à toutes les demandes. L'autre erreur, c'est que, que c'est seulement un réponse filtre, la demande est toujours en processus. Cela signifie que lorsque le contrôle en amont requête, qui est une des OPTIONS de demande, il n'y aura pas d'OPTIONS méthode mise en œuvre, donc, nous aurons une 405 de réponse, ce qui est incorrect.
Voici comment il devrait travail. Il y a donc deux types de la SCRO demandes: demandes simples et le contrôle en amont des demandes. Pour une demande simple, le navigateur va envoyer la demande réelle et ajouter le
Origin
- tête de la demande. Le navigateur attend la réponse pour avoir laAccess-Control-Allow-Origin
en-tête, en disant que l'origine de laOrigin
en-tête est autorisé. Pour qu'il soit considéré comme un "simple demande", il doit répondre aux critères suivants:Accept
Accept-Language
Content-Language
Content-Type
DPR
Save-Data
Viewport-Width
Width
Content-Type
d'en-tête sont:application/x-www-form-urlencoded
multipart/form-data
text/plain
Si la demande ne remplit pas l'une de ces trois critères, un contrôle en amont de la requête. C'est une demande qui est faite au serveur, avant à la réelle demande. Il contient différentes
Access-Control-XX-XX
en-têtes, et le serveur doit répondre à ces en-têtes avec son propre CORS en-têtes de réponse. Voici la correspondance des en-têtes:Avec le
Origin
- tête de la requête, la valeur sera à l'origine de domaine du serveur, et la réponseAccess-Control-Allow-Header
doivent être à cette même adresse ou*
pour spécifier que toutes les origines sont autorisés.Si le client tente de définir manuellement les en-têtes de pas dans la liste ci-dessus, alors le navigateur va définir le
Access-Control-Request-Headers
en-tête, avec la valeur étant une liste de tous les en-têtes que le client tente de définir. Le serveur doit répondre de retour avec unAccess-Control-Allow-Headers
en-tête de réponse, avec la valeur d'une liste d'en-têtes de elle permet.Le navigateur permet également de définir la
Access-Control-Request-Method
en-tête de requête, avec la valeur de la méthode HTTP de la requête. Le serveur doit répondre avec laAccess-Control-Allow-Methods
en-tête de réponse, avec la valeur d'une liste des méthodes qu'il permet.Si le client utilise le
XHR.withCredentials
, puis le serveur doit répondre avec laAccess-Control-Allow-Credentials
en-tête de réponse, avec une valeur detrue
. Lire la suite ici.Donc, avec tout cela dit, voici une meilleure mise en œuvre. Même si c'est mieux que la mise en œuvre, il est toujours inférieure à la RESTEasy un je lien, que cette mise en œuvre permet encore de toutes origines. Mais ce filtre permet de mieux adhérer à la SCRO spec de filtre qui ajoute juste de la SCRO en-têtes de réponse à toutes les demandes. Notez que vous pouvez aussi avoir besoin de modifier le
Access-Control-Allow-Headers
de faire correspondre les en-têtes de votre application; vous pouvez o ajouter ou supprimer des en-têtes de la liste dans cet exemple.Pour en savoir plus sur la SCRO, je suggère la lecture de la MDN docs sur Cross-Origin Resource sharing (SCRO)
ResourceConfig
??jersey-server
afin d'exécuter le Maillot 1.19 code dans cette réponse. Voir: mvnrepository.com/artifact/com.sun.jersey/jersey-servlet/1.19L'autre réponse pourrait être rigoureusement exacte, mais trompeuse. La partie manquante est que vous pouvez mélanger des filtres à partir de différentes sources. Même la pensée Jersey risque de ne pas fournir de la SCRO du filtre (pas un fait, j'ai vérifié mais j'ai confiance en l'autre réponse sur que), vous pouvez utiliser tomcat est propre CORS du filtre.
Je l'utilise avec succès avec Jersey. J'ai ma propre implémentation de l'Authentification de Base de filtre, par exemple, avec de la SCRO. Le meilleur de tous, CORS du filtre est configuré dans le web XML, pas dans le code.
Supprimer l'annotation "
@CrossOriginResourceSharing(allowAllOrigins = true)
"Alors de Retour de Réponse, comme ci-dessous:
Mais la
jsonResponse
devrait remplacer avec un POJO Objet!Pour résoudre ce pour mon projet j'ai utilisé Micheal est réponse et est arrivé à ceci:
De la SCRO filtre de l'exemple de base de filtre de le tomcat site.
Modifier:
Le maven.tomcat.web-xml.fichier variable est un pom de la propriété définie pour le projet et qu'il contient le chemin d'accès à la web.xml fichier (qui se trouve à l'intérieur de mon projet)
peeskillet réponse est bonne. Mais j'ai cette erreur lors de l'actualisation de la page web (c'est en travaillant uniquement sur la première charge):
Donc, au lieu d'utiliser la méthode add pour ajouter des en-têtes de réponse, j'en utilisant la méthode put. C'est ma classe
Et ajouter cette classe init-param dans web.xml
À l'aide de JAX-RS, il vous suffit d'ajouter l'annotation
@CrossOrigin(origin = yourURL)
à votre contrôleur de ressources. Dans votre cas, serait@CrossOrigin(origin = "http://localhost:8080")
mais vous pouvez également utiliser@CrossOrigin(origin = "*")
afin de permettre à toute demande pour obtenir par le biais de votre webservice.Vous pouvez le vérifier CETTE pour plus d'informations.