JAAS для людей
Мне трудно понять JAAS. Все это кажется более сложным, чем должно быть (особенно уроки Sun). Мне нужен простой учебник или пример о том, как реализовать безопасность (аутентификация + авторизация) в Java-приложении на основе Struts + Spring + Hibernate с пользовательским репозиторием пользователя. Может быть реализовано с использованием ACEGI.
6 ответов
Вот некоторые ссылки, которые я использовал, чтобы помочь понять JAAS:
http://www.owasp.org/index.php/JAAS_Tomcat_Login_Module
http://www.javaworld.com/jw-09-2002/jw-0913-jaas.html
http://jaasbook.wordpress.com/
Также ознакомьтесь с практическими рекомендациями по конфигурации областей Apache Tomcat:
Другие пользователи предоставили несколько очень полезных ссылок выше, поэтому я не буду беспокоиться о ссылках. Я провел аналогичное исследование в JAAS для веб-приложений и столкнулся с "препятствием на пути к разуму", пока не понял, что JAAS - это инфраструктура, которая занимается безопасностью на другом "уровне", чем веб-приложения в мире Java. Он создан для решения проблем безопасности в Java SE, а не в Java EE.
JAAS - это структура безопасности, созданная для защиты вещей на гораздо более низком уровне, чем веб-приложение. Некоторым примером таких вещей являются код и ресурсы, доступные на уровне JVM, отсюда и все эти возможности устанавливать файлы политики на уровне JVM.
Однако, поскольку Java EE построен на основе Java SE, несколько модулей из JAAS были повторно использованы в безопасности Java EE, такие как LoginModules и Callbacks.
Обратите внимание, что в дополнение к безопасности Java EE, существует также безопасность Spring (ранее известная как Acegi), которая, подобно нативной безопасности Java EE, решает гораздо более высокий "уровень" в проблеме защиты веб-приложений. Это отдельная реализация безопасности, которая не построена поверх стандартной безопасности Java EE, хотя во многих отношениях она действует аналогично.
Подводя итог, если вы не ищете безопасные ресурсы на уровне Java SE (классы, системные ресурсы), я не вижу реального использования JAAS, кроме использования общего класса и интерфейсов. Просто сосредоточьтесь на использовании Spring Security или простой старой безопасности Java EE, которая решает много общих проблем безопасности веб-приложений.
javax.security - это слишком сложный API. В результате есть разработчики не только LoginModules, но и всего API аутентификации и авторизации, который создает вышеупомянутый уровень абстракции, как менеджеры аутентификации и авторизации.
Для начала, это хорошо, чтобы напечатать это в вашей памяти.
Во-вторых, imho, самой простой библиотекой JAAS для установки и запуска является Jboss PicketBox. В нем говорится, как выполнять аутентификацию и авторизацию через JBossAuthenticationManager и JBossAuthorizationManager ... Легко настраивается через XML или аннотации. Вы можете использовать его для управления как веб-приложениями, так и автономными приложениями.
Если вам нужна часть авторизации для управления доступом к репозиторию, с точки зрения ACL для ресурсов, это то, что вы ищете наверняка.
Проблема с безопасностью заключается в том, что обычно вам нужно настроить ее под свои нужды, так что вы можете в конечном итоге реализовать:
LoginModule - проверяет имя пользователя + пароль
CallbackHandler используется так new LoginContext("Sample", new MyCallbackHandler());
CallbackHandler передается базовым модулям LoginModules, чтобы они могли общаться и взаимодействовать с пользователями - например, запрашивая имя пользователя и пароль через графический интерфейс пользователя. Таким образом, внутри обработчика вы получаете имя пользователя и пароль от пользователя, и они передаются в LoginModule.
LoginContext - тогда вы просто вызываете lc.login(); и аутентифицировать учетные данные. LoginContext заполняется аутентифицированным субъектом.
Однако Jboxss Picketbox дает вам действительно легкий путь, если вам не нужно что-то конкретное.
Ответ Лиу - один из немногих ответов, которые действительно "получают его";)
В добавление к этому ответу, действительно хорошая ссылка на эту тему: " Что случилось с JAAS?,
Он объясняет, как JASPIC является связующим звеном в Java EE между моделями безопасности Servlet и EJB и, возможно, модулем входа в систему JAAS, но во многих случаях роль JAAS сводится к роли относительно простого поставщика имен и ролей в Java EE.
От того же автора JAAS в Enterprise, которая является более старой статьей, но содержит много исторического фона о том, почему модели Java SE (JAAS) и Java EE расходились так, как они это делали.
В целом, но несколько типов из JAAS непосредственно используются в Java EE, в основном Principal
, Subject
, а также CallbackHandler
, Последние два в основном используются JASPIC. Я объяснил JASPIC в статье Реализация аутентификации контейнера в Java EE с помощью JASPIC.
Я не могу слишком много говорить с самим JAAS, но это руководство "Предлагаемые шаги" по Spring Security и справочное руководство являются довольно хорошими ресурсами в Spring Security - если ваши настройки очень близки к простому, вам не нужно делать гораздо больше, чем читать это.
Для ознакомления с руководством по JAAS проверьте это. Он старый, но должен помочь с основами JAAS.