كيفية استخدام عوامل تصفية مسار بوابة VMware Spring Cloud مع خطة Azure Spring Apps Enterprise

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على:❌ Basic/Standard ✔️ Enterprise

توضح هذه المقالة كيفية استخدام عوامل تصفية مسار VMware Spring Cloud Gateway مع خطة Azure Spring Apps Enterprise لتوجيه الطلبات إلى تطبيقاتك.

VMware Spring Cloud Gateway هو مكون VMware Tanzu تجاري يستند إلى مشروع Spring Cloud Gateway مفتوح المصدر. تتعامل Spring Cloud Gateway مع المخاوف الشاملة لفرق تطوير واجهة برمجة التطبيقات، مثل تسجيل الدخول الأحادي (SSO)، والتحكم في الوصول، وتحديد المعدل، والمرونة، والأمان، والمزيد. يمكنك تسريع تسليم واجهة برمجة التطبيقات باستخدام الأنماط السحابية الأصلية الحديثة، وأي لغة برمجة تختارها لتطوير واجهة برمجة التطبيقات.

تتضمن بوابة سحابة الربيع VMware الميزات التالية:

  • تكوين التوجيه الديناميكي، بغض النظر عن التطبيقات الفردية التي يمكن تطبيقها وتغييرها دون إعادة التحويل البرمجي.
  • عوامل تصفية مسار API التجارية لنقل مطالبة JSON Web Token المعتمدة (JWT) إلى خدمات التطبيق.
  • تخويل شهادة العميل.
  • نهج تحديد المعدل.
  • تكوين قاطع الدائرة.
  • دعم الوصول إلى خدمات التطبيق عبر بيانات اعتماد مصادقة HTTP الأساسية.

للتكامل مع مدخل API ل VMware Tanzu، تقوم بوابة VMware Spring Cloud تلقائيا بإنشاء وثائق OpenAPI الإصدار 3 بعد أي إضافات أو تغييرات في تكوين المسار. لمزيد من المعلومات، راجع استخدام مدخل API ل VMware Tanzu.

المتطلبات الأساسية

استخدام عوامل التصفية

يمكنك استخدام عوامل التصفية في تكوين Spring Cloud Gateway للعمل على الطلب الوارد أو الاستجابة الصادرة لتكوين المسار.

على سبيل المثال، يمكنك استخدام عامل تصفية لإضافة رأس HTTP أو لرفض الوصول استنادا إلى رمز التخويل المميز.

استخدام عوامل تصفية مصدر مفتوح

يتضمن Spring Cloud Gateway OSS العديد من GatewayFilter المصانع المستخدمة لإنشاء عوامل تصفية للمسارات. تصف الأقسام التالية هذه المصانع.

AddRequestHeader

AddRequestHeader يضيف المصنع عنوانا إلى رؤوس طلب انتقال البيانات من الخادم لجميع الطلبات المطابقة.

يقبل هذا المصنع معلمات التكوين التالية:

  • name
  • value

يقوم المثال التالي بتكوين AddRequestHeader مصنع يضيف العنوان X-Request-red:blue إلى رؤوس طلب انتقال البيانات من الخادم لجميع الطلبات المطابقة:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue"
        ]
    }
]

يمتلك AddRequestHeader المصنع حق الوصول إلى متغيرات URI المستخدمة لمطابقة مسار أو مضيف. يمكنك استخدام متغيرات URI في القيمة، ويتم توسيع المتغيرات في وقت التشغيل.

يقوم المثال التالي بتكوين AddRequestHeader مصنع يستخدم متغيرا:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue-{segment}"
        ]
    }
]

AddRequestHeadersIfNotPresent

AddRequestHeadersIfNotPresent يضيف المصنع رؤوسا إذا لم تكن موجودة في الطلب الأصلي.

يقبل هذا المصنع معلمة التكوين التالية:

  • headers: قائمة مفصولة بفواصل لأزواج قيم المفاتيح (اسم الرأس، قيمة الرأس).

يقوم المثال التالي بتكوين مصنع AddRequestHeadersIfNotPresent :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
        ]
    }
]

AddRequestParameter

AddRequestParameter يضيف المصنع معلمة إلى سلسلة استعلام طلب انتقال البيانات من الخادم لجميع الطلبات المطابقة.

يقبل هذا المصنع معلمات التكوين التالية:

  • name
  • value

يقوم المثال التالي بتكوين AddRequestParameter مصنع يضيف معلمة red=blue إلى سلسلة استعلام طلب انتقال البيانات من الخادم لجميع الطلبات المطابقة:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestParameter=red, blue"
        ]
    }
]

يمتلك AddRequestParameter المصنع حق الوصول إلى متغيرات URI المستخدمة لمطابقة مسار أو مضيف. يمكنك استخدام متغيرات URI في القيمة، ويتم توسيع المتغيرات في وقت التشغيل.

يقوم المثال التالي بتكوين AddRequestParameter مصنع يستخدم متغيرا:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestParameter=foo, bar-{segment}"
        ]
    }
]

AddResponseHeader

AddResponseHeader يضيف المصنع عنوانا إلى رؤوس استجابة انتقال البيانات من الخادم لجميع الطلبات المطابقة.

يقبل هذا المصنع معلمات التكوين التالية:

  • name
  • value

يقوم المثال التالي بتكوين AddResponseHeader مصنع يضيف عنوانا X-Response-Red:Blue إلى رؤوس استجابة انتقال البيانات من الخادم لجميع الطلبات المطابقة:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddResponseHeader=X-Response-Red, Blue"
        ]
    }
]

يمتلك AddResponseHeader المصنع حق الوصول إلى متغيرات URI المستخدمة لمطابقة مسار أو مضيف. يمكنك استخدام متغيرات URI في القيمة، ويتم توسيع المتغيرات في وقت التشغيل.

يقوم المثال التالي بتكوين AddResponseHeader مصنع يستخدم متغيرا:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddResponseHeader=foo, bar-{segment}"
        ]
    }
]

مكسر الدائرة

يلتف CircuitBreaker المصنع المسارات في قاطع دائرة.

يقبل هذا المصنع معلمات التكوين التالية:

  • name: اسم قاطع الدائرة.
  • fallbackUri: إعادة توجيه URI، والذي يمكن أن يكون مسارا محليا أو معالجا خارجيا.
  • status codes (اختياري): القائمة المفصولة بفواصل برموز الحالة المراد مطابقتها، بتنسيق رقمي أو نصي.
  • failure rate (اختياري): الحد الذي يفتح فوقه قاطع الدائرة. القيمة الافتراضية هي 50٪.
  • duration (اختياري): وقت الانتظار قبل الإغلاق مرة أخرى. القيمة الافتراضية هي 60 ثانية.

يقوم المثال التالي بتكوين CircuitBreaker مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    }
]

DeDupeResponseHeader

يزيل DeDupeResponseHeader المصنع القيم المكررة لرؤوس الاستجابة.

يقبل هذا المصنع معلمات التكوين التالية:

  • name: قائمة مفصولة بمسافة لأسماء العناوين.
  • strategy(اختياري): القيم المقبولة هي RETAIN_FIRSTو RETAIN_LASTو.RETAIN_UNIQUE القيمة الافتراضية هي RETAIN_FIRST.

يقوم المثال التالي بتكوين DeDupeResponseHeader مصنع يزيل القيم المكررة لعناوين Access-Control-Allow-Credentials الاستجابة و Access-Control-Allow-Origin عند إضافة كلتا القيمتين بواسطة منطق CORS للبوابة ومنطق انتقال البيانات من الخادم:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
        ]
    }
]

عناوين احتياطية

FallbackHeaders يضيف المصنع أي استثناء قاطع دائرة إلى رأس. يتطلب عامل التصفية هذا استخدام عامل التصفية CircuitBreaker في مسار آخر.

لا توجد معلمات لهذا المصنع.

يقوم المثال التالي بتكوين FallbackHeaders مصنع بنوع الاستثناء والرسالة ونوع السبب الجذري (إذا كان متوفرا) ونوع الاستثناء والرسالة التي FallbackHeaders يضيفها عامل التصفية إلى الطلب:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    },
    {
        "predicates": [
            "Path=/inCaseOfFailureUseThis"
        ],
        "filters": [
            "FallbackHeaders"
        ]
    }
]

يمكنك الكتابة فوق أسماء الرؤوس في التكوين عن طريق تعيين قيم المعلمات التالية (المذكورة مع قيمها الافتراضية):

  • executionExceptionTypeHeaderName ("نوع استثناء التنفيذ")
  • executionExceptionMessageHeaderName ("Execution-Exception-Message")
  • rootCauseExceptionTypeHeaderName ("نوع استثناء السبب الجذري")
  • rootCauseExceptionMessageHeaderName ("رسالة استثناء السبب الجذري")

JSONToGRPC

يحول JSONToGRPCFilter المصنع حمولة JSON إلى طلب gRPC.

يقبل هذا المصنع معلمة التكوين التالية:

  • protoDescriptor: ملف واصف proto.

يمكنك إنشاء هذا الملف باستخدام protoc العلامة --descriptor_set_out وتحديدها، كما هو موضح في المثال التالي:

protoc --proto_path=src/main/resources/proto/ \
    --descriptor_set_out=src/main/resources/proto/hello.pb \
    src/main/resources/proto/hello.proto

إشعار

streaming المعلمة غير مدعومة.

يقوم المثال التالي بتكوين مصنع JSONToGRPCFilter باستخدام الإخراج من protoc:

[
    {
        "predicates": [
            "Path=/json/**"
        ],
        "filters": [
            "JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
        ]
    }
]

LocalResponseCache

LocalResponseCache يتجاوز المصنع تكوين ذاكرة التخزين المؤقت للاستجابة المحلية لمسارات معينة عند تنشيط ذاكرة التخزين المؤقت العمومية.

يقبل هذا المصنع معلمات التكوين التالية:

  • size: الحد الأقصى المسموح به لحجم إدخالات ذاكرة التخزين المؤقت لهذا المسار قبل بدء إخلاء ذاكرة التخزين المؤقت (ب KB وMB وGB).
  • timeToLive: العمر المسموح به لإدخال ذاكرة التخزين المؤقت قبل انتهاء الصلاحية. استخدم لاحقة s المدة للثوان أو m للدقائق أو h للساعات.

يقوم المثال التالي بتكوين LocalResponseCache مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "LocalResponseCache=3m,1MB"
        ]
    }
]

MapRequestHeader

MapRequestHeader يضيف المصنع عنوانا إلى طلب انتقال البيانات من الخادم مع قيم محدثة من عنوان طلب HTTP الوارد.

يقبل هذا المصنع معلمات التكوين التالية:

  • fromHeader
  • toHeader

ينشئ هذا المصنع رأسا جديدا مسمى (toHeader)، ويتم استخراج القيمة من رأس مسمى موجود (fromHeader) من طلب HTTP الوارد. إذا لم يكن رأس الإدخال موجودا، فلن يكون لعامل التصفية أي تأثير. إذا كان العنوان المسمى الجديد موجودا بالفعل، يتم زيادة قيمه بالقيم الجديدة.

يقوم المثال التالي بتكوين MapRequestHeader X-Request-Red:<values> مصنع يضيف العنوان إلى طلب انتقال البيانات من الخادم مع القيم المحدثة من عنوان طلب Blue HTTP الوارد:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "MapRequestHeader=Blue, X-Request-Red"
        ]
    }
]

مسار البادئة

PrefixPath يضيف المصنع بادئة إلى مسار جميع الطلبات.

يقبل هذا المصنع معلمة التكوين التالية:

  • prefix

يقوم المثال التالي بتكوين PrefixPath مصنع يضيف البادئة /api إلى مسار جميع الطلبات، بحيث يتم إرسال طلب إلى /catalog /api/catalog:

[
    {
        "predicates": [
            "Path=/catalog/**"
        ],
        "filters": [
            "PrefixPath=/api"
        ]
    }
]

PreserveHostHeader

يقوم PreserveHostHeader المصنع بتعيين سمة طلب يقوم عامل تصفية التوجيه بفحصها لتحديد ما إذا كان يجب إرسال عنوان المضيف الأصلي أو عنوان المضيف الذي يحدده عميل HTTP.

لا توجد معلمات لهذا المصنع.

يقوم المثال التالي بتكوين PreserveHostHeader مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "PreserveHostHeader"
        ]
    }
]

RedirectTo

RedirectTo يضيف المصنع إعادة توجيه إلى عنوان URL الأصلي.

يقبل هذا المصنع معلمات التكوين التالية:

  • status: سلسلة 300 إعادة توجيه التعليمات البرمجية HTTP، مثل 301.
  • url: قيمة Location العنوان. يجب أن يكون URI صالحا. بالنسبة إلى عمليات إعادة التوجيه النسبية، يجب استخدام uri: no://op ك URI لتعريف المسار الخاص بك.

يقوم المثال التالي بتكوين RedirectTo مصنع يرسل حالة 302 برأس Location:https://acme.org لإجراء إعادة توجيه:

[
    {
        "uri": "https://example.org",
        "filters": [
            "RedirectTo=302, https://acme.org"
        ]
    }
]

RemoveJsonAttributesResponseBody

يزيل RemoveJsonAttributesResponseBody المصنع سمات JSON وقيمها من هيئات استجابة JSON.

يقبل هذا المصنع معلمات التكوين التالية:

  • attribute names: قائمة مفصولة بفواصل بأسماء السمات لإزالتها من استجابة JSON.
  • delete recursively (اختياري، منطقي): تكوين يزيل السمات فقط على مستوى الجذر (false)، أو بشكل متكرر (true). القيمة الافتراضية هي false.

يقوم المثال التالي بتكوين RemoveJsonAttributesResponseBody مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveJsonAttributesResponseBody=origin,foo,true"
        ]
    }
]

RemoveRequestHeader

يزيل RemoveRequestHeader المصنع رأسا من طلب انتقال البيانات من الخادم.

يقبل هذا المصنع معلمة التكوين التالية:

  • name: اسم الرأس المراد إزالته.

تقوم القائمة التالية بتكوين RemoveRequestHeader X-Request-Foo مصنع يزيل الرأس قبل إرساله إلى الخادم:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestHeader=X-Request-Foo"
        ]
    }
]

RemoveRequestParameter

يزيل RemoveRequestParameter المصنع معلمة قبل إرسالها إلى الخادم.

يقبل هذا المصنع معلمة التكوين التالية:

  • name: اسم معلمة الاستعلام المراد إزالتها.

يقوم المثال التالي بتكوين RemoveRequestParameter مصنع يزيل المعلمة red قبل إرسالها إلى الخادم:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestParameter=red"
        ]
    }
]

RemoveResponseHeader

يزيل RemoveResponseHeader المصنع رأسا من الاستجابة قبل إرجاعه إلى عميل البوابة.

يقبل هذا المصنع معلمة التكوين التالية:

  • name: اسم الرأس المراد إزالته.

تقوم القائمة التالية بتكوين RemoveResponseHeader X-Response-Foo مصنع يزيل العنوان من الاستجابة قبل إرجاعه إلى عميل البوابة:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveResponseHeader=X-Response-Foo"
        ]
    }
]

حجم عنوان الطلب

RequestHeaderSize يحدد المصنع حجم عنوان الطلب.

يقبل هذا المصنع معلمات التكوين التالية:

  • maxSize: الحد الأقصى لحجم البيانات المسموح به بواسطة عنوان الطلب، بما في ذلك المفتاح والقيمة.
  • errorHeaderName: اسم عنوان الاستجابة الذي يحتوي على رسالة خطأ. بشكل افتراضي، يكون اسم عنوان الاستجابة هو errorMessage.

تقوم القائمة التالية بتكوين RequestHeaderSize مصنع يرسل حالة 431 إذا كان حجم أي عنوان طلب أكبر من 1000 بايت:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RequestHeaderSize=1000B"
        ]
    }
]

RewriteLocationResponseHeader

يعدل RewriteLocationResponseHeader المصنع قيمة رأس الاستجابة Location ، عادة للتخلص من التفاصيل الخاصة بالواجهة الخلفية.

يقبل هذا المصنع معلمات التكوين التالية:

  • stripVersionMode: تحتوي هذه المعلمة على القيم المحتملة التالية: NEVER_STRIPو AS_IN_REQUESTو.ALWAYS_STRIP القيمة الافتراضية هي AS_IN_REQUEST.

    • NEVER_STRIP: لا يتم تجريد الإصدار، حتى إذا كان مسار الطلب الأصلي لا يحتوي على أي إصدار.
    • AS_IN_REQUEST: يتم تجريد الإصدار فقط إذا كان مسار الطلب الأصلي لا يحتوي على أي إصدار.
    • ALWAYS_STRIP: يتم دائما تجريد الإصدار، حتى إذا كان مسار الطلب الأصلي يحتوي على إصدار.
  • hostValue: يتم استخدام هذه المعلمة host:port لاستبدال جزء رأس الاستجابة Location عند توفيره. إذا لم يتم توفيره، يتم استخدام قيمة Host عنوان الطلب.

  • protocolsRegex: regex Stringصالح ، يتم مطابقة اسم البروتوكول مقابله. إذا لم يكن متطابقا، فلن يعمل عامل التصفية. القيمة الافتراضية هي http|https|ftp|ftps.

  • locationHeaderName

تقوم القائمة التالية بتكوين مصنع RewriteLocationResponseHeader :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
        ]
    }
]

في هذا المثال، بالنسبة لقيمة POST api.example.com/some/object/nameطلب ، Location تتم إعادة كتابة قيمة عنوان الاستجابة object-service.prod.example.net/v2/some/object/id ك api.example.com/some/object/id.

إعادة كتابة مسار

RewritePath يستخدم المصنع تعبيرات Java العادية للحصول على طريقة مرنة لإعادة كتابة مسار الطلب.

يقبل هذا المصنع معلمات التكوين التالية:

  • regexp
  • replacement

تقوم القائمة التالية بتكوين مصنع RewritePath :

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewritePath=/red/?(?<segment>.*), /$\\{segment}"
        ]
    }
]

في هذا المثال، بالنسبة لمسار /red/blueطلب ، يعين هذا التكوين المسار إلى /blue قبل إجراء طلب انتقال البيانات من الخادم.

إعادة كتابة عنوان الاستجابة

RewriteResponseHeader يستخدم المصنع تعبيرات Java العادية للحصول على طريقة مرنة لإعادة كتابة قيمة عنوان الاستجابة.

يقبل هذا المصنع معلمات التكوين التالية:

  • name
  • regexp
  • replacement

يقوم المثال التالي بتكوين RewriteResponseHeader مصنع:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
        ]
    }
]

في هذا المثال، بالنسبة لقيمة /42?user=ford&password=omg!what&flag=trueرأس ، يتم تعيين التكوين إلى /42?user=ford&password=***&flag=true بعد إجراء طلب انتقال البيانات من الخادم.

SetPath

SetPath يوفر المصنع طريقة بسيطة لمعالجة مسار الطلب عن طريق السماح بأجزاء قوالب المسار. يستخدم عامل التصفية هذا قوالب URI من Spring Framework ويسمح بشرائح مطابقة متعددة.

يقبل هذا المصنع معلمة التكوين التالية:

  • template

يقوم المثال التالي بتكوين SetPath مصنع:

[
    {
        "predicates": [
            "Path=/red/{segment}"
        ],
        "filters": [
            "SetPath=/{segment}"
        ]
    }
]

في هذا المثال، بالنسبة لمسار /red/blueطلب ، يعين هذا التكوين المسار إلى /blue قبل إجراء طلب انتقال البيانات من الخادم.

SetRequestHeader

يستبدل SetRequestHeader المصنع (بدلا من إضافة) جميع العناوين بالاسم المحدد.

يقبل هذا المصنع معلمات التكوين التالية:

  • name
  • value

تقوم القائمة التالية بتكوين مصنع SetRequestHeader :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetRequestHeader=X-Request-Red, Blue"
        ]
    }
]

في هذا المثال، استجاب خادم انتقال البيانات من الخادم ب X-Request-Red:1234، وتم استبداله ب X-Request-Red:Blue.

يمتلك SetRequestHeader المصنع حق الوصول إلى متغيرات URI المستخدمة لمطابقة مسار أو مضيف. يمكنك استخدام متغيرات URI في القيمة، ويتم توسيع المتغيرات في وقت التشغيل.

يقوم المثال التالي بتكوين SetRequestHeader مصنع يستخدم متغيرا:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetRequestHeader=foo, bar-{segment}"
        ]
    }
]

SetResponseHeader

يستبدل SetResponseHeader المصنع (بدلا من إضافة) جميع العناوين بالاسم المحدد.

يقبل هذا المصنع معلمات التكوين التالية:

  • name
  • value

تقوم القائمة التالية بتكوين مصنع SetResponseHeader :

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetResponseHeader=X-Response-Red, Blue"
        ]
    }
]

في هذا المثال، استجاب خادم انتقال البيانات من الخادم ب X-Response-Red:1234، وتم استبداله ب X-Response-Red:Blue.

يمتلك SetResponseHeader المصنع حق الوصول إلى متغيرات URI المستخدمة لمطابقة مسار أو مضيف. يمكنك استخدام متغيرات URI في القيمة، ويتم توسيع المتغيرات في وقت التشغيل.

يقوم المثال التالي بتكوين SetResponseHeader مصنع يستخدم متغيرا:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetResponseHeader=foo, bar-{segment}"
        ]
    }
]

SetStatus

يقوم SetStatus المصنع بتكوين حالة استجابة طلب الخادم.

يقبل هذا المصنع معلمة التكوين التالية:

  • status: قيمة Spring HttpStatus صالحة، والتي يمكن أن تكون قيمة عدد صحيح مثل 404، أو تمثيل سلسلة التعداد، مثل NOT_FOUND.

تقوم القائمة التالية بتكوين مصنع SetStatus :

[
    {
        "predicates": [
            "Path=/experimental/**"
        ],
        "filters": [
            "SetStatus=UNAUTHORIZED"
        ]
    },
    {
        "predicates": [
            "Path=/unknown/**"
        ],
        "filters": [
            "SetStatus=401"
        ]
    }
]

StripPrefix

يزيل StripPrefix المصنع البادئة من الطلب قبل إرسالها إلى الخادم.

يقبل هذا المصنع معلمة التكوين التالية:

  • parts: عدد الأجزاء في المسار إلى التعري من الطلب قبل إرساله إلى الخادم. القيمة الافتراضية هي 1.

يقوم المثال التالي بتكوين StripPrefix مصنع:

[
    {
        "predicates": [
            "Path=/name/**"
        ],
        "filters": [
            "StripPrefix=2"
        ]
    }
]

في هذا المثال، يتم إجراء طلب من خلال البوابة إلى /name/blue/red. يظهر الطلب الذي تم إجراؤه على nameservice أنه nameservice/red.

إعادة المحاولة

Retry يحدد المصنع عدد محاولات إعادة المحاولة.

يقبل هذا المصنع معلمات التكوين التالية:

  • retries: عدد مرات إعادة المحاولة التي يجب محاولة تنفيذها.
  • statuses: رموز حالة HTTP التي يجب إعادة المحاولة، ممثلة باستخدام org.springframework.http.HttpStatus.
  • methods: أساليب HTTP التي يجب إعادة المحاولة، ممثلة باستخدام org.springframework.http.HttpMethod.
  • series: سلسلة رموز الحالة المراد إعادة المحاولة، ممثلة باستخدام org.springframework.http.HttpStatus.Series.
  • exceptions: قائمة الاستثناءات التي تم طرحها والتي يجب إعادة المحاولة.
  • backoff: التراجع الأسي المكون لإعادة المحاولة. يتم تنفيذ عمليات إعادة المحاولة بعد فاصل زمني للتراجع من firstBackoff * (factor ^ n)، حيث n يكون التكرار. إذا maxBackoff تم تكوينه، فإن الحد الأقصى للتراجع المطبق يقتصر على maxBackoff. إذا كان basedOnPreviousValue صحيحا، backoff يتم حساب باستخدام prevBackoff * factor.

يتم تكوين الإعدادات الافتراضية التالية لعامل التصفية Retry ، عند تمكينها:

  • retries: ثلاث مرات.
  • series: سلسلة 5XX.
  • methods: أسلوب GET.
  • exceptions: IOException و TimeoutException.
  • backoff:ذوي الاحتياجات الخاصه.

يقوم المثال التالي بتكوين Retry مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
        ]
    }
]

RequestSize

يمكن للمصنع RequestSize تقييد الطلب من الوصول إلى خدمة انتقال البيانات من الخادم عندما يكون حجم الطلب أكبر من الحد المسموح به.

يقبل هذا المصنع معلمة التكوين التالية:

  • maxSizeDataSize: نوع يتم فيه تعريف القيم كرقم متبوعا بلاحقة اختيارية DataUnit مثل KB أو MB. قيمة اللاحقة الافتراضية هي B لوحدات البايت. إنه حد الحجم المسموح به للطلب المحدد بالبايت.

يقوم المثال التالي بتكوين RequestSize مصنع:

[
    {
        "predicates": [
            "Path=/upload"
        ],
        "filters": [
            "RequestSize=5000000"
        ]
    }
]

في هذا المثال، عند رفض الطلب بسبب الحجم، RequestSize يقوم المصنع بتعيين حالة الاستجابة إلى 413 Payload Too Large مع عنوان errorMessageآخر .

يوضح errorMessageالمثال التالي :

errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB

TokenRelay

يقوم TokenRelay المصنع بإعادة OAuth2 توجيه رمز وصول إلى موارد انتقال البيانات من الخادم. يتم تكوين عامل التصفية هذا كقيمة boolean في تعريف المسار بدلا من عامل تصفية صريح.

يقوم المثال التالي بتكوين TokenRelay مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "tokenRelay": true
    }
]

استخدام عوامل التصفية التجارية

توفر Spring Cloud Gateway ل Kubernetes أيضا العديد من المصانع المخصصة GatewayFilter . تصف الأقسام التالية هذه المصانع.

AllowedRequestCookieCount

AllowedRequestCookieCount يحدد المصنع ما إذا كان يسمح للطلب المطابق بالمتابعة بناء على عدد ملفات تعريف الارتباط.

يقبل هذا المصنع معلمة التكوين التالية:

  • amount: عدد ملفات تعريف الارتباط المسموح بها.

يقوم المثال التالي بتكوين AllowedRequestCookieCount مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestCookieCount=2"
        ]
    }
]

AllowedRequestHeadersCount

AllowedRequestHeadersCount يحدد المصنع ما إذا كان يسمح بطلب مطابق للمتابعة استنادا إلى عدد العناوين.

يقبل هذا المصنع معلمة التكوين التالية:

  • amount: عدد العناوين المسموح بها.

يقوم المثال التالي بتكوين AllowedRequestHeadersCount مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestHeadersCount=4"
        ]
    }
]

AllowedRequestQueryParamsCount

AllowedRequestQueryParamsCount يحدد المصنع ما إذا كان يسمح لطلب مطابق بالمتابعة استنادا إلى معلمات استعلام الأرقام.

يقبل هذا المصنع معلمة التكوين التالية:

  • amount: عدد المعلمات المسموح بها.

يقوم المثال التالي بتكوين AllowedRequestQueryParamsCount مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestQueryParamsCount=3"
        ]
    }
]

BasicAuth

BasicAuth يضيف المصنع عنوانا BasicAuth Authorization للطلبات.

لا توجد معلمات لهذا المصنع.

يقوم المثال التالي بتكوين BasicAuth مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "BasicAuth"
        ]
    }
]

عنوان المطالبة

ينسخ ClaimHeader المصنع البيانات من مطالبة JWT إلى عنوان HTTP.

يقبل هذا المصنع معلمات التكوين التالية:

  • Claim name: الاسم الحساس لحالة الأحرف للمطالبة بتمريرها.
  • Header name: اسم رأس HTTP.

يقوم المثال التالي بتكوين ClaimHeader مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClaimHeader=sub,X-Claim-Sub"
        ]
    }
]

ClientCertificateHeader

يتحقق ClientCertificateHeader المصنع من X-Forwarded-Client-Cert صحة شهادة الرأس.

يقبل هذا المصنع معلمات التكوين التالية:

  • domain patternX-Forwarded-Client-Cert: القيمة وفقا لقدرة Kubernetes على التعرف على المرجع المصدق لشهادة العميل.
  • certificate fingerprint(اختياري): بصمة شهادة TLS/SSL.

يقوم المثال التالي بتكوين ClientCertificateHeader مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
        ]
    }
]

Cors

يقوم Cors المصنع بتنشيط عمليات التحقق من صحة CORS على مسار.

يقبل هذا المصنع معلمات التكوين التالية التي يتم تنظيمها كأزواج قيم المفاتيح لخيارات CORS:

  • allowedOrigins
  • allowedMethods
  • allowedHeaders
  • maxAge
  • allowCredentials
  • allowedOriginPatterns

يقوم المثال التالي بتكوين Cors مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
        ]
    }
]

JsonToXml

يحول JsonToXml المصنع نص استجابة JSON إلى نص استجابة XML.

يقبل هذا المصنع معلمة التكوين التالية:

  • wrapper: اسم علامة الجذر لاستجابة XML إذا كانت هناك حاجة إلى علامة جذر أخرى لإنشاء XML صالح. القيمة الافتراضية هي response.

يقوم المثال التالي بتكوين JsonToXml مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "JsonToXml=custom-response"
        ]
    }
]

RateLimit

RateLimit يحدد المصنع ما إذا كان يسمح للطلب المطابق بالمتابعة بناء على حجم الطلب.

يقبل هذا المصنع معلمات التكوين التالية:

  • request limit: الحد الأقصى لعدد الطلبات المقبولة أثناء النافذة.
  • window duration: مدة النافذة بالمللي ثانية. بدلا من ذلك، يمكنك استخدام sاللاحقات m أو أو h لتحديد المدة بالثوان أو الدقائق أو الساعات.
  • partition source (اختياري): موقع مفتاح القسم (claimأو headerأو IPs).
  • partition key (اختياري): القيمة المستخدمة لتقسيم عدادات الطلب.

يقوم المثال التالي بتكوين RateLimit مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RateLimit=1,10s"
        ]
    }
]

توضح الأمثلة التالية التكوينات الأخرى RateLimit :

RateLimit=1,10s
RateLimit=1,10s,{claim:client_id}
RateLimit=1,10s,{header:client_id}
RateLimit=2,10s,{IPs:2;127.0.0.1;192.168.0.1}

RestrictRequestHeaders

RestrictRequestHeaders يحدد المصنع ما إذا كان يسمح بطلب مطابق للمتابعة استنادا إلى العناوين.

إذا كان هناك أي رؤوس HTTP غير موجودة في التكوين غير headerList الحساس لحالة الأحرف، إرجاع استجابة 431 Forbidden error إلى العميل.

يقبل هذا المصنع معلمة التكوين التالية:

  • headerList: قائمة أسماء الرؤوس المسموح بها غير حساسة لحالة الأحرف.

يقوم المثال التالي بتكوين RestrictRequestHeaders مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RestrictRequestHeaders=Content-Type,x-request-temp"
        ]
    }
]

إعادة كتابةAllResponseHeaders

يعيد RewriteAllResponseHeaders المصنع كتابة رؤوس استجابة متعددة في وقت واحد.

يقبل هذا المصنع معلمات التكوين التالية:

  • pattern to match: التعبير العادي المراد مطابقته مع قيم الرأس.
  • replacement: قيمة الاستبدال.

يقوم المثال التالي بتكوين RewriteAllResponseHeaders مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteAllResponseHeaders=\\d,0"
        ]
    }
]

RewriteResponseBody

يعدل RewriteResponseBody المصنع نص الاستجابة.

يقبل هذا المصنع معلمات التكوين التالية التي يتم تنظيمها كقوائم مفصولة بفواصل لأزواج قيم المفاتيح، حيث يقبل كل زوج النموذج pattern to match:replacement:

  • pattern to match: التعبير العادي المراد مطابقته مع النص في نص الاستجابة.
  • replacement: قيمة الاستبدال.

يقوم المثال التالي بتكوين RewriteResponseBody مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteResponseBody=foo:bar,/path-one/:/path-two/"
        ]
    }
]

إعادة كتابةJsonAttributesResponseBody

يعيد RewriteJsonAttributesResponseBody المصنع كتابة سمات JSON باستخدام JSONPath تدوين.

يقبل هذا المصنع معلمات التكوين التالية التي يتم تنظيمها كقوائم مفصولة بفواصل لأزواج قيم المفاتيح، حيث يقبل كل زوج النموذج jsonpath:replacement:

  • jsonpathJSONPath: التعبير المراد مطابقته مع نص الاستجابة.
  • replacement: قيمة الاستبدال.

يقوم المثال التالي بتكوين RewriteJsonAttributesResponseBody مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
        ]
    }
]

الأدوار

يأذن Roles المصنع بالطلبات التي تحتوي على أحد الأدوار المكونة.

يقبل هذا المصنع معلمة التكوين التالية:

  • roles: قائمة مفصولة بفواصل للأدوار المعتمدة.

يقوم المثال التالي بتكوين Roles مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Roles=role_01,role_02"
        ]
    }
]

النطاقات

يخول Scopes المصنع الطلبات التي تحتوي على أحد النطاقات المكونة OAuth .

يقبل هذا المصنع معلمة التكوين التالية:

  • scopes: قائمة مفصولة بفواصل للنطاقات المعتمدة OAuth .

يقوم المثال التالي بتكوين Scopes مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Scopes=api.read,api.write,user"
        ]
    }
]

عنوان عنوان المتجر

StoreIPAddress يتم استخدام المصنع لتطوير الملحق فقط وفي سياق التطبيق.

يقبل هذا المصنع معلمة التكوين التالية:

  • attribute name: الاسم المستخدم لتخزين IP كسمة تبادل.

يقوم المثال التالي بتكوين StoreIPAddress مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreIpAddress=ip"
        ]
    }
]

تسجيل الدخول إلى تسجيل الدخول الأحادي

يعيد SSO login المصنع التوجيه للمصادقة إذا لم يكن هناك رمز تخويل صالح. تم تكوين هذا المصنع كقيمة boolean في تعريف المسار بدلا من عامل تصفية صريح.

يقوم المثال التالي بتكوين SSO login مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "ssoEnabled": true
    }
]

رأس المتجر

يخزن StoreHeader المصنع قيمة رأس في سياق التطبيق. يستخدم عامل التصفية هذا لتطوير الملحق فقط.

يقبل هذا المصنع معلمات التكوين التالية:

  • headers: قائمة بالرؤوس التي يجب التحقق منها. يتم استخدام أول واحد تم العثور عليه.
  • attribute name: الاسم المستخدم لتخزين قيمة العنوان كسمة تبادل.

يقوم المثال التالي بتكوين StoreHeader مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
        ]
    }
]

XmlToJson

يحول XmlToJson المصنع نص استجابة XML إلى نص استجابة JSON.

لا توجد معلمات لهذا المصنع.

يقوم المثال التالي بتكوين XmlToJson مصنع:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "XmlToJson"
        ]
    }
]

الخطوات التالية