كيفية استخدام عوامل تصفية مسار بوابة 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.
المتطلبات الأساسية
- مثيل خدمة خطة Azure Spring Apps Enterprise الذي تم توفيره بالفعل مع تمكين Spring Cloud Gateway. لمزيد من المعلومات، راجع التشغيل السريع: إنشاء التطبيقات ونشرها في Azure Spring Apps باستخدام خطة المؤسسة.
- إصدار Azure CLI 2.0.67 أو الأحدث. استخدم الأمر التالي لتثبيت ملحق Azure Spring Apps:
az extension add --name spring
.
استخدام عوامل التصفية
يمكنك استخدام عوامل التصفية في تكوين 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
: regexString
صالح ، يتم مطابقة اسم البروتوكول مقابله. إذا لم يكن متطابقا، فلن يعمل عامل التصفية. القيمة الافتراضية هي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
: قيمة SpringHttpStatus
صالحة، والتي يمكن أن تكون قيمة عدد صحيح مثل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
تقييد الطلب من الوصول إلى خدمة انتقال البيانات من الخادم عندما يكون حجم الطلب أكبر من الحد المسموح به.
يقبل هذا المصنع معلمة التكوين التالية:
maxSize
DataSize
: نوع يتم فيه تعريف القيم كرقم متبوعا بلاحقة اختيارية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 pattern
X-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
:
jsonpath
JSONPath
: التعبير المراد مطابقته مع نص الاستجابة.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"
]
}
]
الخطوات التالية
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ