PicketLink保护阻止JSF 2.2资源合同被加载

时间:2015-02-06 12:41:21

标签: jsf-2 jsf-2.2 wildfly picketlink resource-contracts

我有一个带有合同和几个页面的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()

1 个答案:

答案 0 :(得分:1)

我能够通过以下安全配置解决我的问题:

.forPath("/javax.faces.resource/*.png.xhtml").unprotected()

我在我的Firefox Inspector中看到浏览器试图从/MyTestProject/javax.faces.resource/logo-main.png.xhtml?con=TemplateBlue加载图片,所以尝试上述内容似乎合乎逻辑且有效!