¿Qué archivos XHTML necesito poner / WEB-INF y cuáles no?

Después de estas preguntas:

  • https://stackoverflow.com/questions/8589315/jsf2-dynamic-template
  • Ui dynamic: incluir
  • ¿Cómo puedo recuperar un objeto en @WindowScoped?
  • ¿Cómo puedo verificar si un objeto almacenado con @WindowScoped está almacenado correctamente?
  • Caras de ICE y error en la creación de un bean en WindowScoped

que escribí todo para resolver un problema “estúpido” para el marco JSF2, el hecho de que no puedo vincular directamente a una página almacenada en una subcarpeta /WEB-INF . Después de eso investigué un poco sobre Google y Stackoverflow, sabría algo: ¿cómo estructurar un proyecto web JSF2?

En particular, ¿dónde exactamente pongo las páginas XHTML?

Los archivos en la carpeta /WEB-INF no son públicamente accesibles por el usuario final. Por lo tanto, no puede tener algo como http://localhost:8080/contextname/WEB-INF/some.xhtml . Eso sería un potencial agujero de seguridad ya que el usuario final podría verlo entre otros /WEB-INF/web.xml etc.

Sin embargo, puede usar la carpeta /WEB-INF para colocar archivos de plantillas maestras, incluir archivos y archivos de tags. Por ejemplo, la siguiente plantilla cliente page.xhtml que se encuentra fuera /WEB-INF y es accesible desde http://localhost:8080/contextname/page.xhtml :

   ...  ...   

La ventaja de colocar plantillas maestras e incluir archivos en /WEB-INF es que el usuario final no podrá abrirlas directamente ingresando / adivinando su URL en la barra de direcciones del navegador. Las páginas normales y los clientes de plantilla que se pretende acceder directamente no se deben colocar en la carpeta /WEB-INF .

Dicho sea de paso, tampoco se supone que los archivos de componentes compuestos sean de acceso público, sin embargo, por su especificación, se requiere que se coloquen en /resources carpeta /resources que de forma pública es accesible por defecto. Si se asegura de que tiene acceso a todos los recursos utilizando los componentes proporcionados para que nunca sean accedidos por /resources en URL (sino en lugar de / /javax.faces.resource ), puede agregar la siguiente restricción a web.xml para bloquear todo el acceso público a la carpeta /resources :

  Restrict direct access to the /resources folder.  The /resources folder. /resources/*