【问题标题】:How do I protect JSF 2.0 facelets against direct access?如何保护 JSF 2.0 facelets 免受直接访问?
【发布时间】:2012-05-21 07:05:44
【问题描述】:

我发现了一个想法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> 

您会推荐其中一种解决方案,还是两者都常用?

【问题讨论】:

  • 在第一种情况下,最终用户将永远无法访问该页面。而在第二种情况下,授权用户将有权访问该页面。他们的目的不同。如果您的 facelets 是模板,则使用第一个,否则使用第二个。

标签: java jsf facelets


【解决方案1】:

.xhtml 可以放置在网络信息文件夹下并从中提供服务是非常合理的。

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

【讨论】:

    【解决方案2】:

    放入/WEB-INF 文件夹仅适用于模板文件、包含文件和标记文件,这些文件从不可以通过 URL 直接和独立访问,也不能通过有效映射访问。

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

    但更好的是直接将FacesServlet 映射到*.xhtml。这样你就不再需要那个安全约束了。但是,template/include/tag 文件仍应放在/WEB-INF 文件夹中。要了解总体思路,您可能会发现 OmniFaces showcase project 的来源很有帮助(请参阅 WEB-INF here)。

    另见:

    【讨论】:

    • 打包在 jar 中的片段呢?如果我将它们放在 /META-INF/resources 中,用户可以访问原始片段...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 2013-01-03
    • 2012-11-20
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多