JSF аутентификация и авторизация

Как лучше всего реализовать аутентификацию и авторизацию для веб-приложения JSF? Я бы предпочел использовать безопасность на основе контейнеров, так как мне нужно вызывать EJB-компоненты, требующие принципала.

Я понимаю, что аутентификация на основе форм - это серьезная проблема с JSF, но могу ли я использовать PhaseListener или что-то подобное вместе с программным входом в систему для аутентификации пользователя?

Любые другие методы, на которые я бы предпочел взглянуть?


person Zecrates    schedule 27.07.2009    source источник
comment
Не могли бы вы сообщить нам, что вы выбрали?   -  person David Rabinowitz    schedule 26.11.2009
comment
По теме: stackoverflow.com/questions/2206911/ и stackoverflow.com/questions/6189536/   -  person BalusC    schedule 03.06.2011


Ответы (4)


Попробуйте найти в блоге использование JAAS с JSF. Это пример того, как развернуть JAAS с JSF для аутентификации и авторизации.

Я надеюсь, что это помогает.

Тигр

person Tiger    schedule 27.07.2009
comment
Спасибо за ссылку. Однако я не уверен в некоторых вещах. Я предполагаю, что это заменит аутентификацию на основе форм, но как он взаимодействует с моим модулем входа в систему JAAS (в области Glassfish). Я использую область JDBC. Кроме того, разве PhaseListener не подходит для этого лучше, чем ActionListener? - person Zecrates; 28.07.2009
comment
@Tiger: Не могли бы вы сказать что-нибудь о том, когда лучше перейти от безопасности на основе контейнеров к альтернативам, таким как Сиро или другим? См. Более конкретный вопрос здесь: stackoverflow.com/questions/7782720/ - person Rajat Gupta; 16.10.2011

Вы можете использовать платформу Spring Security, инструкции см. Здесь http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/

person David Rabinowitz    schedule 27.07.2009
comment
Спасибо за предложение. Можно ли использовать Spring Security вне Spring Framework? В настоящее время у меня есть прямой JSF с Facelets, и я бы хотел избежать дополнительной зависимости от Spring. - person Zecrates; 28.07.2009
comment
Это зависит от нескольких модулей Spring - веб, ядра и некоторых других (например, jdbc, если вы храните свои пользовательские данные в базе данных). Однако вам не обязательно основывать свое приложение на Spring, просто рассматривайте его как внешнюю библиотеку. - person David Rabinowitz; 28.07.2009
comment
@David: Привет, Дэвид! Не могли бы вы сказать что-нибудь о том, когда лучше перейти от безопасности на основе контейнеров к альтернативам, таким как весенняя безопасность или другим? См. Более конкретный вопрос здесь: stackoverflow.com/questions/7782720/ - person Rajat Gupta; 16.10.2011
comment
@Marcos Я думаю, это в значительной степени зависит от ваших потребностей (насколько сложна ваша аутентификация), насколько проста конфигурация контейнера и можете ли вы добавить стороннюю библиотеку аутентификации, что может быть не так в некоторых сценариях (например, в ИТ-приложениях). В нашем приложении пользователи проходят проверку подлинности с помощью веб-форм для частей сайта, HTTP basic для мобильных веб-страниц и настраиваемых заголовков и форматов проверки подлинности для мобильного API (например, настраиваемых заголовков AWS), поэтому нам требовалось гибкое решение. Кроме того, сейчас у нас есть только весеннее веб-приложение, JSF не осталось из-за многих проблем, которые у нас были с ним. - person David Rabinowitz; 21.10.2011

Я использую JSF Seam, использовал встроенную аутентификацию и авторизацию Seam, и нахожу его чрезвычайно простым в использовании.

Для аутентификации вы просто реализуете 1 метод public boolean login(String username, a String password) { ... } и возвращает логическое значение. Затем вы можете пометить страницы как «требующие входа в систему», а об остальном позаботится Seam.

Для авторизации Seam предоставляет вам @Restrict аннотацию, которую вы можете поместить в свой Контроллер или методы службы, и, опять же, Seam позаботится обо всем остальном.

Расширенная авторизация: вы также можете обрабатывать больше расширенная авторизация с помощью Seam, где роли являются динамическими, например на доске объявлений вы являетесь «автором» некоторых сообщений, но «читателем» или другими сообщениями, просто делегируя аннотацию @Restrict методу Java.

Я бы посоветовал вам взглянуть на Шов. Шов - это просто слой поверх JSF, поэтому технически вы все равно будете работать на JSF. Если по какой-то причине вы не можете использовать Seam, возможно, вы можете позаимствовать некоторые идеи из того, как Seam обрабатывает авторизацию и аутентификацию в JSF.

person Vineet Manohar    schedule 31.07.2009

Вы можете использовать Servlet 3.0 HttpServletRequest API, как показано в этом ответе на вопрос JSF 2.0:

Простая страница входа в JSF 2.0

person mjn    schedule 03.06.2011
comment
Это не часть JSF 2. Это часть Servlet 3.0. Таким образом, это работает только при запуске JSF 1.x / 2.x / безотносительно на Tomcat 7, Glassfish 3, JBoss AS 6 и т. Д. Или новее. - person BalusC; 03.06.2011