通过将复合组件放在/ WEB-INF中来防止直接访问复合组件

时间:2012-12-13 14:10:31

标签: security jsf jsf-2 composite-component web-inf

我正在尝试在我的Web应用程序中定义一些复合组件。根据我阅读的教程,我必须将xhtml文件放在webcontent中的资源文件夹中。 这个解决方案存在问题,因为它可以使这些文件可以从URL进行公共访问。 有没有办法将这些组件放在web-inf文件夹中,并使jsf查找那里的文件? 如果没有,是否有其他方法可以避免直接访问?

感谢。

P.S。:我已经研究过this answer,如果我理解了BalusC的答案,那么我打算做的事情是可能的。

1 个答案:

答案 0 :(得分:3)

“复合组件”与您找到的问题/答案中的“组合”不完全相同。 OP显然正在讨论<ui:include>文件中的合成,其中包括<ui:componsition>内容。

您实际上希望阻止直接访问/resources。这可以通过将以下安全性约束条目添加到web.xml

来实现
<security-constraint>
    <display-name>Restrict direct access to JSF resources</display-name>
    <web-resource-collection>
        <web-resource-name>JSF resources</web-resource-name>
        <url-pattern>/resources/*</url-pattern>
    </web-resource-collection>
    <auth-constraint /><!-- Empty auth constraint! -->
</security-constraint> 

根据即将推出的JSF 2.2,这不再是必要的,因为它允许您通过/resources中的以下配置条目将整个/WEB-INF文件夹移动到web.xml

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>WEB-INF/resources</param-value> 
</context-param>