我正在尝试在我的 Web 应用程序中定义一些复合组件。根据我阅读的教程,我必须将 xhtml 文件放在 webcontent 中的资源文件夹中。这个解决方案是有问题的,因为它会使这些文件可用于从 url 进行公共访问。有没有办法把这些组件放在 web-inf 文件夹中,让 jsf 在那里查找文件?如果没有,是否有另一种方法可以避免直接访问?
谢谢。
PS:我已经研究了这个答案,如果我正确理解了 BalusC 的答案,我打算做的事情是可能的。
“复合组件”与您找到的问题/答案中的“组合”不完全相同。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>