Защита PicketLink останавливает загрузку контракта на ресурсы JSF 2.2
У меня есть веб-приложение JSF 2.2 с контрактом и несколькими страницами, расположенными непосредственно в папке 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 есть строка, которая гласит (перевод с немецкого): " Таблица стилей 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 глава 12.2):
.forPath("/*.png").unprotected()
.forPath("/*.css").unprotected()
1 ответ
Мне удалось решить мою проблему с помощью следующей конфигурации безопасности:
.forPath("/javax.faces.resource/*.png.xhtml").unprotected()
Я видел в своем Firefox Inspector, что браузер пытался загрузить изображение с /MyTestProject/javax.faces.resource/logo-main.png.xhtml?con=TemplateBlue
так что попытка вышеизложенного показалась логичной и это работает!