تعطيل الوصول عن طريق ملحق الملف في Tomcat Web.xml

StackOverflow https://stackoverflow.com/questions/1160918

  •  18-09-2019
  •  | 
  •  

سؤال

شكرا للجميع مقدما -

كيف يمكنني الذهاب حول تعطيل الوصول عبر المتصفح بواسطة FileType؟

على سبيل المثال، إذا أردت تعطيل جميع الوصول إلى ملفات .xml كيف سأذهب في القيام بذلك؟

شكرا

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

المحلول

بقدر ما أعرف أنه لا يوجد حل مباشر لهذا. في نهايةالمطاف من هذا المنصب, ، أوضح كيف يمكنك استخدام jdbcrealm. لإنشاء سياق أمان حول بعض الملفات من انتخابه. إذا حاول المستخدم الوصول إلى ملف يطابق نمطك (في حالتك * .xml)، فسيتم إعادة توجيهها إلى تسجيل الدخول أو صفحة خطأ.

نصائح أخرى

أردت إجابة لهذا نفسي، ولم يكن راضيا عن إجابة JDBCREALM.

يتم ترميز المجلدات المخفية الافتراضية "INF-INF" و "meta-inf" بجد في منطق الموارد الثابتة، لذا فإن استخدام نفس الآلية يبدو صعبا للغاية. يجب عليك استبدال أو تعديل بعض الجمع defaultservlet., StoreContext., ، و standardcontextvalve.. وبعد هذه فوضى.

ولكن هناك طريقتان بسيطتان حاولت أن تحقق التصفية بعد.

باستخدام أ منقي

يمكنك كتابة مرشح Servlet Generic لإرجاع أخطاء 404 لأي ملف مطابق بعض القائمة. يمكنك إعداد تلك القائمة كما مداخل البيئة في context.xml، في خصائص الملف على ClassPath، المخزنة في قاعدة بيانات، أو أيا كان تفضيلاتك (حتى كسلاسل مشدودة، إذا كنت نوعا من المازشيست).

باستخدام أ صمام (Tomcat خاص)

ينجز صمامات Tomcat نفس الشيء مثل المرشحات، ولكن على مستوى أقل. انهم ليسوا جزءا من servlet المواصفات, ، لذلك لن يكون تطبيقك محمولا على حاويات Servlet الأخرى. أيضا، في تجربتي مع ذلك، لا تنتقل 404 الردود من خلال القناة نفسها حيث أرسلت 404 رداية يتم إرسالها بشكل طبيعي في طلبك (على سبيل المثال، إذا قمت بإعداد 404 صفحات أو معالجات مخصصة، فهي غير مستعملة عند إرجاع 404 من صمام في

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

مثله:

<servlet-mapping>
   <servlet-name>Empty Servlet</servlet-name>
   <url-pattern>*.xml</url-pattern>
</servlet-mapping>

هذا لا يعمل مع Tomcat الذي لا يقبل تعيين Servlet دون إعلان Servlet المقابل. أود أن أوصي بإرسال errorservlet بسيط يرسل 404 منهيا مثل:

package com.yourpackage;

public class ErrorServlet extends HttpServlet{
  public ErrorServlet(){
  }
  public void service(HttpServletRequest request, HttpServletResponse response){
    response.sendError(HttpServletResponse.SC_NOT_FOUND);
  }
}

ثم أضف التكوين المقابل في ملف Web.xml:

<servlet>
  <description>Servlet that displays a 404</description>
  <display-name>error</display-name>
  <servlet-class>com.yourpackage.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>error</servlet-name>
   <url-pattern>*.xhmtl</url-pattern>
</servlet-mapping>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top