我有一个带有合同和几个页面的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 Reference Chapter 12.2)得到了想法:
.forPath("/*.png").unprotected()
.forPath("/*.css").unprotected()
答案 0 :(得分:1)
我能够通过以下安全配置解决我的问题:
.forPath("/javax.faces.resource/*.png.xhtml").unprotected()
我在我的Firefox Inspector中看到浏览器试图从/MyTestProject/javax.faces.resource/logo-main.png.xhtml?con=TemplateBlue
加载图片,所以尝试上述内容似乎合乎逻辑且有效!