PicketLink 保护阻止加载 JSF 2.2 资源契约
PicketLink protection stops JSF 2.2 resource contract from being loaded
我有一个 JSF 2.2 web 应用程序,它有一个合同和几个页面,直接位于 WebContent 文件夹中。合约由一张图片、一个模板文件template.xhtml和一个css文件global.css组成。到目前为止一切都按预期工作。
现在我想使用 PicketLink 进行用户身份验证和授权,并遵循了教程(http://www.ocpsoft.org/security/simple-java-ee-jsf-login-page-with-jboss-picketlink-security/), but when accessing my pages the image and css files are unable to be loaded, only the template applies, so my page has no CSS styles applied at all and in the Firefox Inspector there is a line that reads (translated from German): "Stylesheet http://localhost:8080/MyTestProject/login.xhtml 未加载,因为它的 MIME 类型是 "text/html" 而不是 "text/css"”。
替换后
builder.http().allPaths().authenticateWith().form()... and so on
在 HttpSecurityConfiguration class 和
builder.http().allPaths().unprotected()
图像和css可以再次加载。
我尝试了以下(和其他一些路径)但没有解决问题:
.forPath("/contracts/*").unprotected();
如何从 PicketLink 保护中排除合同文件夹?
这是我完整的 HttpSecurityConfiguration class:
@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()
我能够通过以下安全配置解决我的问题:
.forPath("/javax.faces.resource/*.png.xhtml").unprotected()
我在我的 Firefox Inspector 中看到浏览器试图从 /MyTestProject/javax.faces.resource/logo-main.png.xhtml?con=TemplateBlue
加载图像,所以尝试上面的方法似乎合乎逻辑并且有效!
我有一个 JSF 2.2 web 应用程序,它有一个合同和几个页面,直接位于 WebContent 文件夹中。合约由一张图片、一个模板文件template.xhtml和一个css文件global.css组成。到目前为止一切都按预期工作。
现在我想使用 PicketLink 进行用户身份验证和授权,并遵循了教程(http://www.ocpsoft.org/security/simple-java-ee-jsf-login-page-with-jboss-picketlink-security/), but when accessing my pages the image and css files are unable to be loaded, only the template applies, so my page has no CSS styles applied at all and in the Firefox Inspector there is a line that reads (translated from German): "Stylesheet http://localhost:8080/MyTestProject/login.xhtml 未加载,因为它的 MIME 类型是 "text/html" 而不是 "text/css"”。
替换后
builder.http().allPaths().authenticateWith().form()... and so on
在 HttpSecurityConfiguration class 和
builder.http().allPaths().unprotected()
图像和css可以再次加载。
我尝试了以下(和其他一些路径)但没有解决问题:
.forPath("/contracts/*").unprotected();
如何从 PicketLink 保护中排除合同文件夹?
这是我完整的 HttpSecurityConfiguration class:
@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()
我能够通过以下安全配置解决我的问题:
.forPath("/javax.faces.resource/*.png.xhtml").unprotected()
我在我的 Firefox Inspector 中看到浏览器试图从 /MyTestProject/javax.faces.resource/logo-main.png.xhtml?con=TemplateBlue
加载图像,所以尝试上面的方法似乎合乎逻辑并且有效!