Rumah >Java >javaTutorial >Bagaimana untuk Menyelesaikan Isu CORS dalam JAX-RS dengan Jersi?

Bagaimana untuk Menyelesaikan Isu CORS dalam JAX-RS dengan Jersi?

DDD
DDDasal
2024-12-19 15:34:14854semak imbas

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

Mengendalikan CORS dengan JAX-RS Menggunakan Jersi

Masalah: Anda menghadapi masalah CORS semasa mengendalikan permintaan dengan JAX-RS dan Jersi. Khususnya, pelayan tidak menetapkan pengepala CORS yang diperlukan, membawa kepada ralat "Tiada pengepala 'Access-Control-Allow-Origin' hadir pada sumber yang diminta."

Penyelesaian: Untuk mengendalikan CORS dalam JAX-RS dengan Jersi, anda perlu melaksanakan ContainerResponseFilter. Perbezaan dalam pelaksanaan bergantung pada sama ada anda menggunakan Jersi 1.x atau 2.x.

Jersi 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");
    }
}

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

Tambahan Nota:

  • Pastikan penapis CORS didaftarkan dengan objek ResourceConfig.
  • Untuk pengendalian yang lebih baik, pertimbangkan untuk menggunakan pelaksanaan yang lebih mantap yang membezakan antara permintaan CORS mudah dan pra-penerbangan .
  • Rujuk pelaksanaan CORSFilter dalam RESTeasy untuk lebih komprehensif contoh.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Isu CORS dalam JAX-RS dengan Jersi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn