Защита 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так что попытка вышеизложенного показалась логичной и это работает!

Другие вопросы по тегам