Защита приложений JSF - PullRequest
3 голосов
/ 31 июля 2011

Мой друг-фрилансер попросил меня присоединиться к нему в проекте 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-форварды, поскольку я видел много сообщений от других, имеющих такую ​​же проблему? Это, по крайней мере, дало бы мне направление двигаться дальше.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2012

Комбинация фильтра сервлетов для проверки страницы (применяется к сервлету лиц), сессионный компонент идентификации (хранение пользовательских атрибутов, например, роли, идентификатора входа) и нескольких методов для проверки прав (например, isAdmin (), canViewRecord (recordID)) по всей вашей странице.

Видите ли, когда речь идет о безопасности, я предпочитаю не оставлять это в чужой руке. Кроме того, я проверяю в нескольких местах (сокрытие компонента не помешает людям подделать правильный запрос POST для запуска определенных методов bean, так что будьте внимательны).

0 голосов
/ 25 апреля 2012

Когда я работаю с JSF, я использую Spring-Security.

По поводу поведения, которое вы комментируете, что Spring Security позволяет перенаправлениям с помощью командных кнопок, странно, что у вас неправильная конфигурация, потому что она отлично работает в моем проекте (я только что проверил).

В любом случае вы также можете использовать теги безопасности Spring для рендеринга или нет компонентов в соответствии с ролью пользователя.

Это проект, который может помочь вам реализовать теги. http://www.dominikdorn.com/facelets/

Надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...