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

mjn*_*mjn 7 java jsf facelets

我在这里找到了一个想法,将文件放在/ 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> 
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 12

放入/WEB-INF文件夹仅适用于模板文件,包含文件和标记文件,这些文件永远不能直接通过URL访问,也不能通过有效的映射进行独立访问.

当你还没有映射的安全限制仅适用于公开的文件FacesServlet*.xhtml.如果您已将其映射到*.jsf那么您可以通过foo.jsfURL 打开公共资源,但只需将扩展名更改为,即可检索原始XHTML源代码foo.xhtml.该安全约束阻止了这一点.

但更好的是刚刚在地图FacesServlet*.xhtml直接.这样您就不再需要该安全约束.但是,模板/包含/标记文件仍应放在/WEB-INF文件夹中.为了得到一般的想法,您可能会发现OmniFaces展示项目的来源很有帮助(参见WEB-INF 此处).

也可以看看: