Pregunta

Gracias a todos por adelantado -

¿Cómo hago para deshabilitar el acceso a través del navegador por tipo de archivo?

Por ejemplo si se quiere desactivar todos los accesos a los archivos .xml ¿cómo voy a ir haciendo esto?

Gracias

¿Fue útil?

Solución

Por lo que yo sé no existe una solución fácil para esto. Al final de este post , se explica cómo se puede utilizar jdbcRealm para crear un contexto de seguridad en torno a algunos archivos de su elección. Si un usuario intenta acceder a un archivo que coincida con el patrón (en su caso * .xml), que serán redireccionados a un inicio de sesión o una página de error.

Otros consejos

Yo quería una respuesta a esto por mí mismo, y no estaba satisfecho con la respuesta jdbcRealm.

Las carpetas ocultas por defecto "WEB-INF" y "META-INF" están codificados en la lógica del recurso estático, por lo que usar el mismo mecanismo parece demasiado difícil. Habría que reemplazar o modificar alguna combinación de DefaultServlet , StandardContext, y StandardContextValve . Es un desastre.

Pero hay dos formas sencillas que he intentado que completan el filtrado que está buscando.

Uso de un

Usted puede escribir un filtro de servlet genérico para devolver errores 404 para cualquier archivo coinciden con alguna lista. Usted puede configurar esa lista Medio Ambiente entradas en context.xml, en un el archivo en la ruta de clase, almacenada en una base de datos, o lo que sea su preferencia (incluso en forma de cadenas no modificables, si usted es una especie de masoquista).

Uso de un válvula (-Tomcat específico)

Las válvulas Tomcat lograr más o menos lo mismo que los filtros, pero a un nivel inferior. No forman parte de la servlet Spec , por lo que su aplicación no será portable a otros contenedores de servlets. Además, en mis experimentos con este, el envío de 404 respuestas no pasan por el mismo canal que 404 respuestas enviadas normalmente en su aplicación (por ejemplo, si la configuración personalizados 404 páginas o manipuladores, que no se utilizan cuando un 404 regresa de una Válvula )

Hay aún más simple manera. Usted acaba de redirigir todas las peticiones con la extensión específica a algún servlet vacía.

De esta manera:

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

Esto no funciona con Tomcat que no acepta un servlet-mapping sin una declaración servlet correspondiente. Yo recomendaría escribiendo un ErrorServlet simple que envía 404 sistemáticamente como por ejemplo:

package com.yourpackage;

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

A continuación, añadir la configuración correspondiente en el archivo 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top