Мой друг-фрилансер попросил меня присоединиться к нему в проекте JSF 2.0, и я медленно набираю скорость и собираю кусочки. Исходя из мира Windows Forms .NET, мне нужно многому научиться, если не сказать больше.
Мое основное беспокойство вызывает отсутствие очевидного консенсуса о том, как защитить приложение JSF.
Некоторые способы были предложены здесь для SO, включая использование безопасности Spring, безопасности Seam, пользовательских прослушивателей фазы или просто использование атрибута rendered="#{...}"
для отображения / скрытия компонентов на основе аутентификации пользователя.
Я попытался реализовать некоторые из этих методов, например Spring security, только чтобы выяснить, что его легко победить с помощью механизма навигации JSF, который перенаправляет в представления вместо перенаправления. Другими словами, безопасность Spring будет работать нормально, если пользователь введет URL-адрес защищенной страницы напрямую, но не если действие h:commandButton
приведет его туда.
В связи с этим некоторые предложили принудительное перенаправление с помощью "faces-redirect=true"
, но мы считаем, что это может стать проблемой производительности, поскольку каждый раз это вызывает 2 запроса от браузера.
С другой стороны, я отказался от попыток реализовать безопасность Seam после того, как получил так много ошибок отсутствующих зависимостей.
Лучшее решение, которое я нашел на данный момент, - это настраиваемый фазовый слушатель из Дункан Миллс - Эффективная авторизация страниц в JavaServer Faces , но я не уверен на 100%, что его следует использовать в общедоступных приложениях JSF .
Итак, наконец, с чем это нас оставляет? Я знаю, что это довольно открытый вопрос, но я, честно говоря, понятия не имею, куда идти дальше. Я почти уверен, что следовал различным учебным пособиям к письму, например, учебникам Spring, но я все еще не удовлетворен тем, как это работает.
Может ли кто-нибудь хотя бы подтвердить / опровергнуть тот факт, что Spring Security должен работать через JSF-форварды, поскольку я видел много сообщений от других, имеющих такую же проблему? Это, по крайней мере, дало бы мне направление двигаться дальше.
Спасибо.