如何保护JSF 2.0 facelets免受直接访问?

时间:2012-05-13 14:16:39

标签: java jsf facelets

我找到了一个想法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> 

您会推荐其中一种解决方案,还是一般都使用?

2 个答案:

答案 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。