我找到了一个想法here,将文件放在/ WEB-INF下是一种阻止直接访问的方法:
使用Facelets,还可以将XHTML文件放在/ WEB-INF下,如果 它们是模板或包含文件(与JSP相同的限制) 基本上)。
该页面还提供了基于Java EE安全性的解决方案,该解决方案仅允许直接XHTML访问特定用户组的成员。
<security-constraint>
<display-name>Restrict XHTML Documents</display-name>
<web-resource-collection>
<web-resource-name>XHTML</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Only let 'developer's access XHTML pages</description>
<role-name>developer</role-name>
</auth-constraint>
</security-constraint>
您会推荐其中一种解决方案,还是一般都使用?
答案 0 :(得分:12)
放入/WEB-INF
文件夹仅适用于模板文件,包含文件和标记文件,这些文件应该从不直接通过URL访问,也不能通过有效的映射进行独立访问。< / p>
当您未在FacesServlet
上映射*.xhtml
时,安全约束仅适用于公共文件。例如,如果您已将其映射到*.jsf
,那么您可以通过foo.jsf
网址打开公共资源,但只需将扩展名更改为foo.xhtml
即可检索原始XHTML源代码。该安全约束阻止了这一点。
但更好的方法是直接在FacesServlet
上映射*.xhtml
。这样您就不再需要该安全约束。但是,模板/包含/标记文件仍应放在/WEB-INF
文件夹中。要获得一般性建议,您可能会发现OmniFaces showcase project的来源很有帮助(请参阅WEB-INF
here)。
答案 1 :(得分:1)
非常合理的是.xhtml可以放在网络信息文件夹下并从中提供。
我不会依赖装饰性编程,例如将规则放入web.xml,查看JSecurity等安全解决方案,为我的应用程序提供JAAS。