Ответ 1
Штукатурные функции безопасности, на которые вы надеетесь не только существовать, Oracle даже полезное сообщение в блоге, подробно посвященное теме, в комплекте с образцом кода.
И поскольку для меня было бы кратким и невежливым просто связать документы и запустить, что следует, это немного дискуссия о том, как это происходит вместе, насколько мне известно.
0-я проблема: грубая, декларативная безопасность
Самая большая проблема с декларативной безопасностью - заставляет вас итеративно определять все ваши роли пользователей во время разработки. Это крайне нежелательно по двум причинам: во-первых, это не позволяет правильно абстрагировать вашу модель безопасности от вашей реализации (неспособно адекватно будущий приложение и раскрытие уязвимых мест для раскрытия информации), а во-вторых, он привязывает ваши роли пользователей к непосредственному дизайну вашего приложения, обычно не предоставляет мелкомасштабных разрешений или ACL, когда они желательны или необходимы.
По сути, это проблема недостаточной абстракции. Вы используете систему, которая немедленно отвечает вашим текущим потребностям, но не такая, которую вы можете ожидать, чтобы быть работоспособной или поддерживаемой в течение жизненного цикла вашего приложения, поскольку роли становятся более сложными и сложность вашей базы кода неуклонно возрастает.
Мелкозернистая безопасность с помощью управляемого Beans
Решение первого порядка здесь заключается в использовании модели абстракции, которая позволяет вам определять роли пользователей независимо друг от друга в контексте каждого вызова метода JSF, позволяя вам поменять местами или выходить по мере необходимости. В качестве бонуса это позволяет вам определять более мелкие разрешения, так как такая схема позволяет вам определять ваши разрешения для каждого метода вместо каждого представления, для каждой конечной точки или для bean. А если роли меняются? Вам нужно обновить свою модель разрешений только в одном месте, вместо того, чтобы переходить к каждой из этих beans и заменять свои пользовательские определения.
вышеупомянутая статья идет гораздо более подробно, чем я готов здесь освещать, поэтому я настоятельно рекомендую прочитать сообщение в блоге. Но выгода здесь заключается в том, чтобы сделать это правильно, вы должны предоставить как стек аутентификации, так и слой аннотации, описывающий роли разрешений, а твой должен встречаться только там, где вы явно и намеренно связали эти два.
Определение тонких вызовов метода и политики безопасности, которая имеет смысл, остается как упражнение для читателя, но если у вас есть вопросы в этой области, не стесняйтесь спрашивать их в комментариях или в наборе последующих действий поскольку эти вопросы по своей сути полезны широкой аудитории.
Улучшения
Можно предположить, что это решение недостаточно устойчиво для ваших нужд. Например, если вы хотите аутентифицировать пользователей, используя LDAP или Kerberos, чтобы обеспечить унифицированное представление ваших пользователей и ролей, это дает лишь частичное решение для удовлетворения ваших потребностей. Несколько отличный ресурсы существуют в этом домене, но это иначе оставлено в качестве упражнения для читателя.
Конечная вынос здесь, в идеальном мире, именно так должна определяться ваша безопасность приложений. Ваши потребности могут различаться, а для чего-то оставленного в небольшом масштабе простая декларативная безопасность может быть в порядке, чтобы удовлетворить ваши потребности. В конце концов, почему он продолжает существовать.
Но для больших приложений, которые должны безопасно и правильно удовлетворять потребности большого числа пользователей, это правильный путь. Для этого требуется немного больше знаний и накладных расходов, но это сэкономит вам массу времени, усилий и разочарования, если вы начнете делать это правильно.
Как всегда, удачи с вашим приложением.