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

Lui*_*lez 3 security jsf web-inf composite-component jsf-2

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

谢谢。

PS:我已经研究过这个答案,如果我正确理解了 BalusC 的答案,我打算做的事情是可能的。

Bal*_*usC 5

“复合组件”与您找到的问题/答案中的“组合”并不完全相同。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> 
Run Code Online (Sandbox Code Playgroud)

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

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>WEB-INF/resources</param-value> 
</context-param>
Run Code Online (Sandbox Code Playgroud)