CORS ב- JAX-RS

1. סקירה כללית

במאמר מהיר זה נלמד כיצד להפעיל CORS (שיתוף משאבים בין-מקור) ב JAX-RS מערכת מבוססת. נגדיר יישום נוסף על גבי JAX-RS כדי לאפשר CORS מַנגָנוֹן.

2. כיצד להפעיל מנגנון CORS

ישנן שתי דרכים בהן אנו יכולים לאפשר CORS ב- JAX-RS. הדרך הראשונה והבסיסית ביותר היא ליצור פילטר להזרקת כותרת תגובה הכרחית בזמן הריצה בכל בקשה. השנייה היא להוסיף כותרת מתאימה באופן ידני בכל נקודת סיום של כתובת אתר.

באופן אידיאלי, יש להשתמש בפתרון הראשון; עם זאת, כאשר זו אינה אפשרות, האפשרות הידנית יותר היא טכנית גם כן.

2.1. באמצעות המסנן

JAX-RS יש את ContainerResponseFilter ממשק - מיושם על ידי מסנני תגובת המכולה. בדרך כלל מופע מסנן זה מוחל באופן גלובלי על כל תגובת HTTP.

אנו ניישם את הממשק הזה כדי ליצור מסנן מותאם אישית שיוזרק בקרת גישה-אפשר- * כותרת לכל בקשה יוצאת והפעל את CORS מַנגָנוֹן:

@Provider מחלקה ציבורית CorsFilter מיישם ContainerResponseFilter {@Override public void filter (ContainerRequestContext requestContext, ContainerResponseContext responseContext) זורק IOException {responsContext.getHeaders (). הוסף ("Access-Control-Allow-Origin", "*") responseContext.getHeaders (). הוסף ("בקרת גישה-אפשר-אישורים", "נכון"); responseContext.getHeaders (). הוסף ("Access-Control-Allow-Headers", "מקור, סוג תוכן, קבל, הרשאה"); responseContext.getHeaders (). הוסף ("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); }}

כמה נקודות כאן:

  • מסננים המיישמים ContainerResponseFilter יש לציין במפורש עם @ ספק להתגלות על ידי זמן הריצה של JAX-RS
  • אנחנו מזריקים 'בקרת גישה-אפשר- *'כותרת עם' * ', כלומר ניתן לגשת לנקודות קצה של כתובות אתרים למופע שרת זה באמצעות כל תחום; אם ברצוננו להגביל את הגישה בין תחומים באופן מפורש, עלינו להזכיר את התחום בכותרת זו

2.2. שימוש בשינוי כותרת בכל נקודת קצה

כאמור קודם, אנו יכולים להזריק במפורש את 'בקרת גישה-אפשר- *'כותרת גם ברמת נקודת הקצה:

@GET @Path ("/") @Produces ({MediaType.TEXT_PLAIN}) אינדקס תגובה ציבורי () {return Response .status (200) .header ("Access-Control-Allow-Origin", "*"). Header ("בקרת גישה-אפשר-אישורים", "נכון"). כותרת ("כותרת-בקרת גישה-אפשר-כותרות", "מקור, סוג תוכן, קבל, הרשאה"). כותרת ("בקרת גישה-אפשר - שיטות "," GET, POST, PUT, DELETE, אפשרויות, HEAD ") .entity (" ") .build (); }

נקודה שיש לציין כאן היא אם אנו מנסים לאפשר CORS ביישום גדול, אנחנו לא צריכים לנסות שיטה זו מכיוון שבמקרה זה, עלינו להזרים את הכותרת באופן ידני לכל נקודות קצה של כתובות אתרים שיציגו תקורה נוספת.

עם זאת, ניתן להשתמש בטכניקה זו ביישומים, בהם עלינו לאפשר CORS רק בחלק מנקודות הקצה של כתובת האתר.

3. בדיקות

לאחר סיום היישום, אנו יכולים לבדוק את הכותרות באמצעות פקודות התלתל. פלט של כותרות לדוגמא צריך להיות משהו כמו להלן:

HTTP / 1.1 200 אישור תאריך: יום שלישי, 13 במאי 2014 12:30:00 GMT חיבור: שמור על החיים בקרת גישה-אפשר-מקור: * כניסה-בקרת-אישורי-אישורים: בקרת גישה-אמת-כותרות כותרת: מקור , סוג תוכן, קבל, הרשאות גישה-בקרת-אפשר-שיטות: GET, POST, PUT, DELETE, אפשרויות, HEAD העברת קידוד: chunked

יתרה מכך, אנו יכולים ליצור פונקציית AJAX פשוטה ולבדוק את הפונקציונליות החוצה דומיינים:

פונקציית קריאה (url, type, data) {var request = $ .ajax ({url: url, method: "GET", data: (data)? JSON.stringify (data): "", dataType: type}); request.done (פונקציה (resp) {console.log (resp);}); request.fail (פונקציה (jqXHR, textStatus) {console.log ("הבקשה נכשלה:" + textStatus);}); };

כמובן שכדי לבצע את הבדיקה בפועל, נצטרך להריץ זאת במקור שונה מזה של ה- API שאנו צורכים.

אתה יכול לעשות זאת באופן מקומי די בקלות על ידי הפעלת אפליקציית לקוח ביציאה נפרדת - מכיוון שהנמל אכן קובע את מקורו.

4. מסקנה

במאמר זה הראינו אודות יישום CORS מנגנון ביישומים מבוססי JAX-RS.

כמו תמיד, קוד המקור המלא זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found