Ответ 1
Попробуйте проверить блог на с помощью JAAS с JSF. Это пример того, как развернуть JAAS с JSF для аутентификации и авторизации.
Надеюсь, это поможет.
Тайгер
Каков наилучший способ реализации аутентификации и авторизации для веб-приложения JSF? Предпочтительно, я все же хотел бы использовать защиту на основе контейнеров, поскольку мне нужно вызвать EJB, для которых требуется основной.
Я понимаю, что проверка подлинности на основе форм - это серьезная борьба с JSF, но могу ли я, возможно, использовать PhaseListener или что-то подобное вместе с программным входом для аутентификации пользователя?
Любые другие методы, над которыми мне стоит взглянуть?
Попробуйте проверить блог на с помощью JAAS с JSF. Это пример того, как развернуть JAAS с JSF для аутентификации и авторизации.
Надеюсь, это поможет.
Тайгер
Вы можете использовать инфраструктуру безопасности Spring, см. инструкции здесь http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/
Я использую JSF Seam и использовал встроенную аутентификацию и авторизацию Seam и нашел ее чрезвычайно простой в использовании.
Для аутентификации вы просто реализуете 1 метод, public boolean login(String username, a String password) { ... }
и возвращаете логическое значение. Затем вы можете пометить страницы как "необходимые для входа", и шов заботится обо всем остальном.
Для авторизации Seam дает вам @Restrict
аннотацию, которую вы можете применить к своим методам Controller или Service, и снова Seam заботится обо всем остальном.
Расширенное разрешение: вы также можете обрабатывать более расширенную авторизацию с Seam, где роли динамические - например. на доске объявлений вы являетесь "автором" некоторых сообщений, но "читателем" или другими сообщениями, просто делегируя аннотацию @Restrict методу Java.
Я бы посоветовал вам взглянуть на Сима. Seam - это просто слой поверх JSF, так что технически вы все равно будете работать на JSF. Если по какой-то причине вы не можете использовать Seam, возможно, вы сможете заимствовать некоторые идеи из того, как Seam обрабатывает авторизацию и аутентификацию в JSF.
Вы можете использовать API-интерфейс Servlet 3.0 HttpServletRequest, как показано в этом ответе на вопрос JSF 2.0: