Maison >Java >javaDidacticiel >Comment implémenter le filtrage CORS avec JAX-RS et Jersey (1.x et 2.x) ?

Comment implémenter le filtrage CORS avec JAX-RS et Jersey (1.x et 2.x) ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 04:09:24809parcourir

How to Implement CORS Filtering with JAX-RS and Jersey (1.x and 2.x)?

Gestion de CORS avec JAX-RS et Jersey

Le partage de ressources cross-origine (CORS) permet un échange de données sécurisé entre des ressources sur différents domaines. Pour gérer CORS dans les applications Java utilisant JAX-RS avec Jersey, un ContainerResponseFilter peut être utilisé. Dans cet article, nous explorerons comment implémenter le filtrage CORS avec les versions Jersey 2.x et 1.x.

Jersey 2.x

Pour Jersey 2. x, l'implémentation suivante de ContainerResponseFilter répond efficacement à notre objectif :

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException {
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        response.getHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

Jersey 1.x

Pour Jersey 1.x, l'implémentation suivante de ContainerResponseFilter doit être utilisée :

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

@Provider
public class CORSFilter implements ContainerResponseFilter {
    @Override
    public ContainerResponse filter(ContainerRequest request, 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;
    }
}

Configuration des filtres

Pour enregistrer ces filtres dans votre application, vous pouvez utiliser l'analyse des packages ou l'enregistrement explicite. Pour Jersey 2.x, l'analyse des packages devrait être suffisante, tandis que Jersey 1.x peut nécessiter un enregistrement explicite dans web.xml ou dans ResourceConfig.

Considérations supplémentaires

Veuillez notez que cette implémentation est une approche simpliste et peut ne pas traiter tous les détails liés à CORS. Pour une solution plus robuste et personnalisable, il est recommandé d'explorer le CorsFilter fourni par RESTeasy, qui est conforme aux dernières spécifications CORS.

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