2011-04-15 57 views
12

Soy nuevo en JSF y escribo primero simplemente la aplicación web jsf.¿Cómo evitar el acceso del usuario a la página .xhtml en JSF?

La URL con .jsf se correlaciona con los archivos .xhtml en WebContent pero por qué puedo abrir .xhtml en el navegador web con todas las etiquetas jsf. ¿Cómo proteger esto?

+1

Intente ponerlos bajo WEB-INF – ahvargas

+3

@ahvargas: Esto no funciona para JSF. – BalusC

+0

¿Las restricciones son aditivas? Por ejemplo: Restringir documentos XHTML sin procesar XHTML * .xhtml Auth/* Admin no restringe los archivos xhtml sin formato a ser transmitido a los usuarios con – nimo23

Respuesta

18

Puede agregar una restricción de seguridad a su web.xml bloqueando todas las solicitudes al *.xhtml.

<security-constraint> 
    <display-name>Restrict raw XHTML Documents</display-name> 
    <web-resource-collection> 
     <web-resource-name>XHTML</web-resource-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </web-resource-collection> 
    <auth-constraint /> 
</security-constraint> 
10

Aparte de la definición de un <security-constraint> bloquear el acceso directo a los archivos como .xhtml contestadas correctamente por Stacker sobre esta cuestión, se podría también acaba de cambiar el <url-pattern> del FacesServlet mapeo de *.jsf a *.xhtml.

<servlet> 
    <servlet-name>facesServlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>facesServlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 

En este 1.x JSF utiliza para terminar en un bucle infinito, pero en 2.x JSF ya no. Por lo tanto, puede llamar/vincular todas las páginas como .xhtml sin tocar otras extensiones. La única desventaja es que usted no será capaz de mostrar un archivo XHTML "normal" sin invocar la FacesServlet, pero este tipo de páginas debe ser nombrado .html de todos modos :)

+1

Esto funciona en Tomcat pero no en GAE. –

+0

@s_t_e_v_e: GAE es una bestia extraña de todos modos. – BalusC

+2

No entiendo, si define en * .xhtml y establecido en * .xhtml, ¿cómo establecer xhtml para que no se bloquee? – michal777

2

En GAE se necesitan dos cosas:

  1. editar web.xml como se describe anteriormente
  2. poner en appengine-web.xml
<static-files> 
    <exclude path="/**.xhtml" /> 
</static-files>` 
1

Se puede utilizar un filtro de servlet

@WebFilter(filterName = "XhtmlFilter", urlPatterns = { "*.xhtml" }) 
public class XhtmlFilter implements Filter { 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws IOException, ServletException { 
     ((HttpServletResponse) response).sendError(404); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void destroy() { 
    } 
} 
0

por lo que he experimentado, la respuesta de mk761203 es definitivamente útil cuando la creación de un proyecto para la aplicación de Google caras del motor y del servidor. sin la exclusión de estos archivos, el GAE automáticamente interpela los archivos con la extensión .xhtml como archivos estáticos que son atendidos por servidores dedicados de la granja de servidores googles. lea más aquí: https://developers.google.com/appengine/docs/java/config/appconfig#Static_Files_and_Resource_Files

Cuestiones relacionadas