"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل مشكلات CORS في JAX-RS مع Jersey؟

كيفية حل مشكلات CORS في JAX-RS مع Jersey؟

تم النشر بتاريخ 2024-12-21
تصفح:893

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

التعامل مع CORS مع JAX-RS باستخدام Jersey

المشكلة: أنت تواجه مشكلة CORS أثناء التعامل مع الطلبات مع JAX-RS وجيرسي. على وجه التحديد، لا يقوم الخادم بتعيين رؤوس CORS الضرورية، مما يؤدي إلى الخطأ "لا يوجد رأس 'Access-Control-Allow-Origin' موجود على المورد المطلوب."

الحل: للتعامل مع CORS في JAX-RS مع Jersey، تحتاج إلى تنفيذ ContainerResponseFilter. يعتمد الاختلاف في التنفيذ على ما إذا كنت تستخدم Jersey 1.x أو 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 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");
    }
}

جيرسي 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;
    }
}

ملاحظات إضافية:

  • تأكد من تسجيل مرشح CORS مع كائن ResourceConfig.
  • للتعامل بشكل أفضل، فكر في استخدام تنفيذ أكثر قوة يفرق بين طلبات CORS البسيطة وطلبات الاختبار المبدئي.
  • ارجع إلى تنفيذ CORSFilter في RESTeasy للحصول على طريقة أكثر شمولاً مثال.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3