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