Maison >Java >javaDidacticiel >Comment résoudre les problèmes CORS dans JAX-RS avec Jersey ?

Comment résoudre les problèmes CORS dans JAX-RS avec Jersey ?

DDD
DDDoriginal
2024-12-19 15:34:14828parcourir

How to Solve CORS Issues in JAX-RS with Jersey?

Gestion de CORS avec JAX-RS à l'aide de Jersey

Problème : Vous rencontrez un problème CORS lors du traitement des requêtes avec JAX-RS et Jersey. Plus précisément, le serveur ne définit pas les en-têtes CORS nécessaires, ce qui entraîne l'erreur « Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. »

Solution : Pour gérer CORS dans JAX-RS avec Jersey, vous devez implémenter un ContainerResponseFilter. La différence de mise en œuvre dépend de si vous utilisez Jersey 1.x ou 2.x.

Jersey 2.x :

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        MultivaluedMap<String, Object> headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

Jersey 1.x :

import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerResponse response) {
        response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHttpHeaders().add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHttpHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");

        return response;
    }
}

Supplémentaire Remarques :

  • Assurez-vous que le filtre CORS est enregistré avec l'objet ResourceConfig.
  • Pour une meilleure gestion, envisagez d'utiliser une implémentation plus robuste qui fait la différence entre les requêtes CORS simples et les requêtes CORS en amont. .
  • Reportez-vous à l'implémentation de CORSFilter dans RESTeasy pour un exemple plus complet.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn