سؤال

   <servlet-mapping>
      <servlet-name>myName</servlet-name>
      <url-pattern>/aName</url-pattern>
   </servlet-mapping>

    <security-constraint>

            <web-resource-collection>

                    ...

                    <url-pattern>
                            /*
                    </url-pattern>

            </web-resource-collection>

             ...

    </security-constraint>

هذا مقتطف من web.xml (باستخدامه لتكوين خدمة ويب jboss/tomcat). فقط أتساءل عما إذا كان url-pattern في web-resource-collection بالنسبة إلى url-pattern في servlet-mapping.

هل كانت مفيدة؟

المحلول

ال url-pattern المستخدمة لتحديد القيود لطلب معين لا يتعلق بأي شيء. الأجزاء المثيرة للاهتمام من مواصفات servlet هنا هي:

SRV.12.8.3 طلبات المعالجة

عندما تتلقى حاوية servlet طلبًا ، يجب أن تستخدم الخوارزمية الموضحة في SRV.11.1 لتحديد القيود (إن وجدت) على url-pattern هذه هي أفضل تطابق لطلب URI. إذا لم يتم تحديد أي قيود ، فيجب على الحاوية قبول الطلب. وإلا فإن الحاوية يجب أن تحدد ما إذا كانت طريقة HTTP للطلب مقيدة في النمط المحدد. إذا لم يكن الأمر كذلك ، يجب قبول الطلب. خلاف ذلك ، يجب أن يفي الطلب القيود التي تنطبق على http-methodفي ال url-pattern. يجب استيفاء كل من القواعد التالية لقبول الطلب وإرساله إلى servlet المرتبطة.

و:

srv.11.1 استخدام مسارات URL

عند استلام طلب العميل ، تحدد حاوية الويب تطبيق الويب الذي يقوم بإعادة توجيهه إليه. يجب أن يحتوي تطبيق الويب المحدد على أطول مسار سياق يطابق بداية عنوان URL للطلب. الجزء المتطابق من عنوان URL هو مسار السياق عند رسم الخرائط إلى servlets.

يجب على حاوية الويب التالية تحديد موقع servlet لمعالجة الطلب باستخدام إجراء تعيين المسار الموضح أدناه.

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

  1. ستحاول الحاوية العثور على مطابقة دقيقة لمسار الطلب إلى مسار servlet. تطابق ناجح يختار servlet.
  2. ستحاول الحاوية بشكل متكرر مطابقة أطول مسار. يتم ذلك عن طريق التنقل إلى شجرة المسار دليل في وقت واحد ، باستخدام الحرف "/" كفاصل مسار. أطول مباراة تحدد servlet المحددة.
  3. إذا كان الجزء الأخير في مسار عنوان URL يحتوي على امتداد (على سبيل المثال .jsp) ، فسيحاول حاوية Servlet مطابقة servlet التي تتعامل مع طلبات التمديد. يتم تعريف التمديد على أنه جزء من الجزء الأخير بعد الأخير ". حرف.
  4. إذا لم تؤد أي من القواعد الثلاثة السابقة إلى تطابق Servlet ، فسيحاول الحاوية خدمة المحتوى المناسب للمورد المطلوب. إذا تم تعريف servlet "افتراضي" للتطبيق ، فسيتم استخدامه.

SRV.11.2 مواصفات التعيينات

في واصف نشر تطبيق الويب ، يتم استخدام بناء الجملة التالي لتحديد التعيينات:

  • يتم استخدام سلسلة تبدأ بحرف "/" وتنتهي مع لاحقة "/*" لرسم خرائط المسار.
  • سلسلة تبدأ بـ "*." يتم استخدام البادئة كتعيين تمديد.
  • تشير سلسلة تحتوي فقط على الحرف "/" إلى servlet "الافتراضي" للتطبيق. في هذه الحالة ، يكون مسار servlet هو الطلب URI ناقص مسار السياق ومعلومات المسار فارغة.
  • يتم استخدام جميع الأوتار الأخرى للمطابقة الدقيقة فقط.

نصائح أخرى

سيكون من المنطقي بالنسبة لي أن أمنية/جمعية موارد ويب/توصيل URL هو ليس بالنسبة إلى servlet mapping/url-pattern, ، للسبب التالي: يمكن أن يكون هناك عدة Servlet Mapping العناصر في web.xml ، وفي هذه الحالة لن يكون من الواضح أي من servlet mapping/url-pattern لأخذ لحل URI النسبي ، هل كان واحد. (مجرد تخمين - لم أستخدم القيود الأمنية في Tomcat حتى الآن).

لا ، فهي ليست متعلقة ببعضها البعض ؛ لا توجد وسيلة لربط معطى Servlet Mapping إلى أمنية. يتم تطبيق كلاهما على نمط عنوان URL معين ، ويمكن أيضًا تطبيق قيود الأمان فقط على طرق HTTP محددة (الحصول على ، بعد ،) بحيث تكون مستقلة تمامًا.

يتم تعريف كلا العنصرين ووصفهما في مواصفات servlet. قد ترغب في قراءة الأقسام SRV.12.8 حول الأمان ، وتفاصيل حول عنصر عنوان URL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top