2011-03-17 29 views
6

Tengo una aplicación web en Tomcat con un archivo JSP principal que incluye otro archivo JSP en el centro de la página. Quiero denegar el acceso a ese archivo directamente y solo permitir el acceso directo a la página principal del índice.tomcat denegar el acceso a archivos específicos

Además, no quiero que los usuarios puedan obtener imágenes de mi aplicación web directamente.

¿Cómo puedo denegar esas solicitudes con Tomcat? Quiero que todas las solicitudes se reenvíen a mi página principal.

Respuesta

4

Una forma sería la implementación de un Filter

Por ejemplo:

package package; 

import javax.servlet.*; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class FilterImplementation implements Filter 
{ 
    public void init(FilterConfig filterConfig) throws ServletException {...} 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
    { 
     // if you detect an illegal request, throw an exception or return without calling chain.doFilter. 
     chain.doFilter(request, response);  
    } 

    public void destroy() {...} 
} 

añada lo siguiente a web.xml:

<filter> 
    <filter-name>MyFilter</filter-name> 
    <filter-class>package.FilterImplementation</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

EDITAR

Todo lo necesito saber sobre whi La página ch se está solicitando en el parámetro request. El tipo de parámetro es ServletRequest sin embargo, casi siempre será un HttpServletRequest por lo que se puede hacer lo siguiente:

if (request instanceof HttpServletRequest) 
{ 
    HttpServletRequest hrequest = (HttpServletRequest) request; 
    String uri = hrequest.getRequestURI(); // you should be able to just use this 
    String uri = hrequest.getRequestURL(); // otherwise there are more in-depth fields 
} 
+0

¿Cómo puedo obtener la página solicitada? – shay

3
  1. En cuanto a los archivos JSP incluidos, debe colocarlas bajo WEB-INF carpeta. De esta forma, no se puede acceder directamente desde el navegador, pero permite que su archivo JSP principal los incluya.

  2. Lo mismo con las imágenes, pero las imágenes son un poco difíciles, pero factibles. Colóquelos en la carpeta WEB-INF, y debido a eso, no puede acceder a las imágenes estáticamente desde la etiqueta <img>. Lo que se necesita hacer es crear un servlet que sirve como un proxy para obtener la imagen y transmitir hacia fuera ... así, su <img> se ve algo como esto: -

====== ====

<img src="/webapp/imageServlet?img=world.jpg"> 

==========

Su ImageServlet leerá entonces world.jpgWEB-INF archivo de carpeta y transmitir la imagen a cabo.

9

De la página Prevent access to include files.

Añadir en web.xml:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Include files</web-resource-name> 
     <description>No direct access to include files.</description> 
     <url-pattern>/inc/*</url-pattern> 
     <http-method>POST</http-method> 
     <http-method>GET</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>No direct browser access to include files.</description> 
     <role-name>NobodyHasThisRole</role-name> 
    </auth-constraint> 
</security-constraint> 
Cuestiones relacionadas