Java 如何保护JSF2.0 facelets免受直接访问?

Java 如何保护JSF2.0 facelets免受直接访问?,java,jsf,facelets,Java,Jsf,Facelets,我发现了一个想法,将文件放在/WEB-INF下是阻止直接访问的一种方法: 使用Facelets,如果需要,还可以将XHTML文件放在/WEB-INF下 它们是模板或包含的文件(与JSP的限制相同) 基本上) 该页面还提供了一个基于JavaEE安全性的解决方案,它只允许特定用户组的成员直接访问XHTML <security-constraint> <display-name>Restrict XHTML Documents</display-name>

我发现了一个想法,将文件放在/WEB-INF下是阻止直接访问的一种方法:

使用Facelets,如果需要,还可以将XHTML文件放在/WEB-INF下 它们是模板或包含的文件(与JSP的限制相同) 基本上)

该页面还提供了一个基于JavaEE安全性的解决方案,它只允许特定用户组的成员直接访问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> 

限制XHTML文档
XHTML
*.xhtml
仅允许开发人员访问XHTML页面
开发商

您会推荐这些解决方案中的一种,还是两者都普遍使用?

将.xhtml放在web信息文件夹下并从中提供服务是非常合理的


我将不再依赖于装饰性编程(如将规则放入web.xml),而是研究安全解决方案(如JSecurity),为我的应用程序提供JAAS。

放入
/web-INF
文件夹仅适用于模板文件,包括文件和标记文件,这些文件和标记文件不应通过URL直接和独立访问,也不应通过有效的映射访问

安全约束仅适用于未在
*.xhtml
上映射
FacesServlet
的公共文件。例如,如果您已经将其映射到
*.jsf
上,那么您可以通过
foo.jsf
URL打开公共资源,但是您可以通过将扩展名更改为
foo.XHTML
来检索原始的XHTML源代码。这种安全约束阻止了这种情况的发生

但更好的方法是直接在
*.xhtml
上映射
FacesServlet
。这样,您就不再需要这种安全约束。但是,模板/包含/标记文件仍应放在
/WEB-INF
文件夹中。要了解大致情况,您可以找到有用的源代码(请参见
WEB-INF

另见:

在第一种情况下,最终用户将永远无法访问该页面。而在第二种情况下,授权用户将可以访问该页面。他们的目的不同。如果您的facelet是模板,则使用第一个模板,否则使用第二个模板?如果我把它们放在/META-INF/resources中,用户就可以访问原始片段。。。