Ove*_*eer 14 css jsf facelets jsf-2
我多年来一直在使用前缀映射,并决定切换到后缀映射,只是为了/faces真正摆脱url.在我挖洞之前,我只是想检查一下我是否朝着正确的方向前进,因为有一些意想不到的事情正在发生.我改变了这个:
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
对此:
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
然后我看到所有内容FacesServlet都.xhtml
附加到它上面,因此浏览器正在请求background.png.xhtml文件,
style.css.xhtml文件 - 这是正确的吗?我认为它被称为后缀映射,但它看起来有些凌乱,我试图说服自己这是要走的路.
在我引用URI的CSS文件中,我还必须附加.xhtml:
background-image: url(images/background.png.xhtml);
Run Code Online (Sandbox Code Playgroud)
然后我看到BalusC的一篇帖子提供了一个解决方案,可以防止资源下载而无需通过FacesServlet:
<security-constraint>
<display-name>Restrict raw XHTML docs</display-name>
<web-resource-collection>
<web-resource-name>XHTML</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)
当我添加这个时,只有真实.xhtml文件加载到页面上,所有其他资源(尽管已经.xhtml附加)不显示.
我想知道的是:
这是否适用.xhtml于一切正常(对不起,如果这几年最愚蠢的问题)
为什么'限制原始xhtml文档'安全约束会阻止加载CSS,JavaScript和图像等资源?
感谢您的任何反馈.我在Glassfish 3.1上使用Mojarra 2.1.2.
Bal*_*usC 17
然后我看到通过FacesServlet的所有内容都附加了.xhtml,以便浏览器请求.png.xhtml文件,.css.xhtml文件 - 这是对的吗?
这仅适用于<h:outputStylesheet>和包含的资源<h:outputScript>.这不涉及到在URL映射的变化.这与从JSF 1.x到JSF 2.x的更改<link rel="stylesheet">以及<script>从上述JSF2标记的更改有关.
对于自己的脚本,样式表等静态的东西是从公共服务的web内容,你应该不手动添加的.xhtml扩展名.您不应该对现有静态资源进行任何更改.
仅对于url()使用<h:outputStylesheet>标记包含的CSS文件中的CSS背景图像和其他引用(因此不适用于<link rel="stylesheet>),您需要更改url()EL要动态解析的位置.您需要使用以下语法:
body {
background-image: url("#{resource['libraryname:path/to/image.png']}");
}
Run Code Online (Sandbox Code Playgroud)
想象一下,您有以下/resources文件夹结构:
WebContent
|-- META-INF
|-- resources
| `-- default
| |-- images
| | `-- background.png
| `-- css
| `-- style.css
|-- WEB-INF
`-- test.xhtml
Run Code Online (Sandbox Code Playgroud)
并且,你包括style.css在test.xhtml如下
<h:outputStylesheet library="default" name="css/style.css" />
Run Code Online (Sandbox Code Playgroud)
那你应该按如下方式定义背景图片网址
body {
background-image: url("#{resource['default:images/background.png']}");
}
Run Code Online (Sandbox Code Playgroud)
或者当你依赖默认库时,你没有使用它library,那么它应该是这样的:
WebContent
|-- META-INF
|-- resources
| |-- images
| | `-- background.png
| `-- css
| `-- style.css
|-- WEB-INF
`-- test.xhtml
Run Code Online (Sandbox Code Playgroud)
test.xhtml:
<h:outputStylesheet name="css/style.css" />
Run Code Online (Sandbox Code Playgroud)
style.css:
body {
background-image: url("#{resource['images/background.png']}");
}
Run Code Online (Sandbox Code Playgroud)
至于securiry约束,它是不是当你已经在使用所需的*.xhtml映射.安全约束旨在防止最终用户FacesServlet在其他模式上映射时看到原始XHTML源代码*.xhtml.终端用户将能够通过仅去除看到XHTML源代码/faces从URL中的情况下,部分/faces/*映射或重命名.jsf以.xhtml在一个的情况下*.jsf的映射.摆脱安全约束,它会使你的情况变得更糟,因为你已经在使用*.xhtml映射,这使得通过黑客攻击URL已经无法看到原始的XHTML源代码.
| 归档时间: |
|
| 查看次数: |
7234 次 |
| 最近记录: |