我有一个 JSF 2.2 webapp,其中包含一个合同和几个页面,它们直接位于 WebContent 文件夹中。合约由一张图片、一个模板文件template.xhtml和一个 css 文件global.css组成。到目前为止,一切都按预期工作。
现在我想使用 PicketLink 进行用户身份验证和授权,并遵循了一个教程(http://www.ocpsoft.org/security/simple-java-ee-jsf-login-page-with-jboss-picketlink-security/) ,但是当访问我的页面时,无法加载图像和 css 文件,只有模板适用,所以我的页面根本没有应用 CSS 样式,并且在 Firefox Inspector 中有一行显示(翻译自德语):“样式表http://localhost:8080/MyTestProject/login.xhtml未加载,因为它的 MIME 类型是“text/html”而不是“text/css”。
更换后
builder.http().allPaths().authenticateWith().form()... and so on
在HttpSecurityConfiguration类中
builder.http().allPaths().unprotected()
可以再次加载图像和 css。
我尝试了以下(以及其他一些路径),但没有解决问题:
.forPath("/contracts/*").unprotected();
如何从 PicketLink 保护中排除合同文件夹?
这是我完整的 HttpSecurityConfiguration 类:
@ApplicationScoped
public class HttpSecurityConfiguration {
public void onInit(@Observes SecurityConfigurationEvent event) {
SecurityConfigurationBuilder builder = event.getBuilder();
builder
.http()
.allPaths()
.authenticateWith()
.form()
.loginPage("/login.xhtml")
.errorPage("/loginError.xhtml")
.restoreOriginalRequest()
.forPath("/logout")
.logout()
.redirectTo("/index.xhtml")
.forPath("/index.xhtml")
.unprotected()
// .forPath("/contracts/*")
// .unprotected()
;
}
}
编辑 在回复 Kukeltje 的评论时,我在模板中包含了 CSS
<h:head>
<title><ui:insert name="title">MyTestProject</ui:insert></title>
<h:outputStylesheet name="global.css" />
</h:head>
和图像
<h:graphicImage class="feature" name="logo-main.png" width="900" height="270" />
我还尝试将javax.faces.resource包含为不受保护,但仍然无法正常工作。
编辑#2 以下也不起作用,我从文档中得到了这个想法(PicketLink 参考第 12.2 章):
.forPath("/*.png").unprotected()
.forPath("/*.css").unprotected()