Maison >Java >javaDidacticiel >Comment implémenter la gestion CORS dans JAX-RS avec Jersey ?

Comment implémenter la gestion CORS dans JAX-RS avec Jersey ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-23 20:25:13903parcourir

How to Implement CORS Handling in JAX-RS with Jersey?

Gestion CORS dans JAX-RS avec Jersey

Introduction

Partage de ressources inter-origines (CORS) permet une communication sécurisée entre une application Web et des ressources hébergées sur un domaine différent. La gestion de CORS est essentielle dans les API RESTful pour permettre les requêtes inter-domaines. JAX-RS fournit un mécanisme pratique pour gérer CORS à l'aide de filtres personnalisés.

Implémentation de filtre pour Jersey 2.x

Dans Jersey 2.x, un ContainerResponseFilter peut être utilisé pour ajouter des en-têtes CORS aux réponses. Le filtre suivant ajoute les en-têtes nécessaires :

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

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        MultivaluedMap<String, String> headers = responseContext.getHeaders();

        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

Enregistrement du filtre

Le filtre CORS peut être enregistré dans ResourceConfig comme suit :

final ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(CORSFilter.class);

Implémentation du filtre pour Jersey 1.x

Pour Jersey 1.x, un ContainerResponseFilter peut également être utilisé :

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

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerRequestContext requestContext, ContainerResponse response) {

        response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHttpHeaders().add("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
        response.getHttpHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");

        return response;
    }
}

Configuration Web.xml pour Jersey 1.x

Dans web.xml, configurez le filtre comme suit :

<init-param>
  <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
  <param-value>com.yourpackage.CORSFilter</param-value>
</init-param>

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