Heim >Java >javaLernprogramm >Wie löst man CORS-Probleme in JAX-RS mit Jersey?

Wie löst man CORS-Probleme in JAX-RS mit Jersey?

DDD
DDDOriginal
2024-12-19 15:34:14828Durchsuche

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

Verarbeitung von CORS mit JAX-RS unter Verwendung von Jersey

Problem:Bei der Bearbeitung von Anfragen tritt ein CORS-Problem auf mit JAX-RS und Jersey. Insbesondere setzt der Server nicht die erforderlichen CORS-Header, was zu dem Fehler „Auf der angeforderten Ressource ist kein ‚Access-Control-Allow-Origin‘-Header vorhanden“ führt.

Lösung: Um CORS in JAX-RS mit Jersey zu verarbeiten, müssen Sie einen ContainerResponseFilter implementieren. Der Unterschied in der Implementierung hängt davon ab, ob Sie Jersey 1.x oder 2.x verwenden.

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;
    }
}

Zusätzlich Hinweise:

  • Stellen Sie sicher, dass der CORS-Filter beim ResourceConfig-Objekt registriert ist.
  • Für eine bessere Handhabung sollten Sie die Verwendung einer robusteren Implementierung in Betracht ziehen, die zwischen einfachen und Preflight-CORS-Anfragen unterscheidet .
  • Ein umfassenderes Beispiel finden Sie in der CORSFilter-Implementierung in RESTeasy.

Das obige ist der detaillierte Inhalt vonWie löst man CORS-Probleme in JAX-RS mit Jersey?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn