7

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

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

该页面还提供了一个基于 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> 

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

4

2 回答 2

12

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

安全约束仅适用于未映射FacesServleton的公共文件*.xhtml。例如,如果您已将其映射,*.jsf那么您可以通过 URL 打开公共资源foo.jsf,但只需将扩展名更改为foo.xhtml. 该安全约束阻止了这一点。

但更好的是FacesServlet直接映射*.xhtml。这样你就不再需要那个安全约束了。但是,模板/包含/标签文件仍应放在/WEB-INF文件夹中。要获得总体思路,您可能会发现OmniFaces 展示项目的源代码很有帮助(请参阅WEB-INF 此处)。

也可以看看:

于 2012-05-13T18:35:35.143 回答
1

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

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

于 2012-05-13T16:32:10.860 回答