Создание безопасных компонентов уровня предприятия в Java EE 5
Поддержка спецификаций Java EE 5 в среде IDE NetBeans позволяет полностью использовать многие возможности Java EE 5, упрощающие разработку приложений. Значительным достижением в спецификации Java EE 5 стали встраиваемые аннотации. Аннотации позволяют устранить значительное количество шаблонного кода, используемого в разработке приложений, а также свести к минимуму действия по настройке, требуемые при развертывании приложения.
Одна из областей, значительно упрощаемых с помощью аннотаций, – разработка и настройка компонентов уровня предприятия. Аннотации позволяют указывать многие параметры настройки, которые ранее указывались в файлах дескриптора развертывания, так что многие из этих файлов дескриптора развертывания становятся излишними. Несмотря на то, что некоторые файлы дескриптора развертывания могут все же требоваться (например, web.xml), редактор дескрипторов развертывания среды IDE значительно упрощает внесение изменений в файлы.
С использованием аннотаций создание безопасных компонентов уровня предприятия существенно упрощается. Вместо настройки параметров безопасности такого компонента в дескрипторе развертывания ejb-jar.xml необходимые установки можно определить непосредственно в исходном коде с помощью аннотаций безопасности. Для приложений уровня предприятия для Java EE 5 не требуется ejb-jar.xml или application.xml.
Обзор некоторых из возможностей спецификации Java EE 5 приведен в документе Введение в технологию Java EE 5. Для получения дополнительных сведений о спецификациях аннотаций см. документ JSR 250: Common Annotations for the Java Platform.
В этом документе представлена среда IDE NetBeans, выпуск 6.1. Действия, описанные в данном руководстве, также могут применяться при работе с версией среды IDE 6.0, однако некоторые возможности, доступные в среде IDE NetBeans 6.1, в более ранних выпусках отсутствуют.
Предполагаемая продолжительность: 30 минут
Упражнения по темам руководства
Для работы с этим руководством требуется программное обеспечение и ресурсы, перечисленные ниже.
| Среда IDE NetBeans |
Web & Java EE, версия 6.1 или
версия 6.0 |
| Комплект для разработчика на языке Java (JDK) |
версия 6 или
версия 5 |
| Сервер приложений GlassFish |
V2 |
Для работы с этим руководством потребуется зарегистрировать в IDE локальный экземпляр сервера приложений Glass Fish/Sun Java System Application Server. Если установлена версия среды IDE "Full" или "Web & Java EE", сервер приложений, скорее всего, уже установлен и зарегистрирован. Если сервер приложений не зарегистрирован в среде IDE, выберите "Tools > Servers" для регистрации сервера в диспетчере серверов. Развертывание приложений уровня предприятия на веб-сервере Tomcat невозможно.
Предварительные условия
Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:
- Программирование на Java
- Среда IDE NetBeans
Создание группы безопасности на сервере приложений
В нашем примере доступ к компоненту уровня предприятия должен быть предоставлен только пользователям из группы bank_users. Для этого на сервере приложений будет создан пользователь manager в группе bank_users в области безопасности file.
- Запустите сервер приложений, для чего щелкните правой кнопкой мыши узел в окне "Services" и выберите "Start".
- Щелкните правой кнопкой мыши узел сервера приложений и выберите "View Admin Console". Войдите в систему консоли администратора и выберите "Configuration > Security > Realms > file" на левой панели переходов.
- Нажмите кнопку "Manage Users" в средней области консоли администратора. В разделе "Current Users" нажмите кнопку "New".
- В поле "User ID" введите manager, в поле "Password" – password, в поле "Group List" – bank_users. Затем нажмите кнопку "OK".
Создание приложения уровня предприятия
Разрабатываемое приложение уровня предприятия состоит из простого сеансного компонента и прикладного клиента, предпринимающего попытки доступа к нему.
Создание проекта приложения уровня предприятия
- Выберите "File > New Project" (Ctrl-Shift-N) и выберите шаблон "Enterprise Application" в категории "Enterprise". Нажмите кнопку "Next".
- Назовите приложение Secure и определите местоположение проекта.
- Снимите флажок "Use Dedicated Folder", если он выбран.
(Этот параметр доступен в среде IDE NetBeans 6.1. В рамках этого руководства копирование библиотек проекта в выделенную папку лишено смысла, поскольку совместное использование библиотек с другими пользователями или проектами не потребуется.)
Нажмите кнопку "Next".
- Выберите сервер "GlassFish" и установите в поле "Java EE Version" версию "Java EE 5".
- Установите флажки "Create EJB Module" и "Create Web Application Client Module"; снимите флажок "Create Web Module". Нажмите кнопку "Finish".
Обеспечение безопасности метода в сеансном компоненте
Сеансный компонент не выполняет сложных действий. Он просто возвращает условное значение баланса. Требуется создать метод getStatus и обеспечить безопасность компонента метода посредством аннотации @RolesAllowed с указанием ролей безопасности, которым разрешен доступ к этому методу. Эта роль безопасности используется приложением и не соответствует пользователям и группам на сервере. Соответствие между ролью безопасности и пользователями и группами устанавливается в дальнейшем, при настройке дескрипторов развертывания.
Аннотации безопасности могут применяться индивидуально к каждому методу класса, либо ко всему классу в целом. В этом простом упражнении для аннотации метода используется @RolesAllowed, однако в Java EE 5 определены и другие аннотации безопасности, которые могут использоваться в компонентах уровня предприятия.
- Щелкните правой кнопкой мыши узел модуля EJB (Secure-ejb) в окне "Projects" и выберите "New > Session Bean".
- Назовите компонент AccountStatus, назовите пакет bean и назначьте компоненту удаленный интерфейс. Нажмите кнопку "Finish".
После нажатия кнопки "Finish" в среде IDE создается файл AccountStatusBean, который открывается в редакторе исходного кода. Также в среде IDE для компонента создается удаленный интерфейс AccountStatusRemote.
- Добавьте к AccountStatusBean в редакторе исходного кода следующие объявления полей (выделены полужирным шрифтом):
public class AccountStatusBean implements AccountStatusRemote {
private String amount = "250";
- Щелкните правой кнопкой мыши в любом месте внутри AccountStatusBean в редакторе исходного кода и выберите "EJB Methods > Add Business Method". Назовите метод getStatus, установите тип возвращаемого значения String. С помощью среды IDE бизнес-метод автоматически становится доступным в удаленном интерфейсе.
- Добавьте следующую строку, выделенную полужирным шрифтом, в метод getStatus в редакторе исходного кода:
public String getStatus() {
return "The account contains $" + amount;
}
- Добавьте следующие строки (выделены полужирным шрифтом) для аннотации метода getStatus.
@RolesAllowed({"USERS"})
public String getStatus() {
Эта аннотация означает, что доступ к методу getStatus предоставляется только пользователям с ролью безопасности USERS.
- Зафиксируйте операторы импорта и сохраните изменения. Убедитесь в том, что в файл добавлена аннотация javax.annotation.security.RolesAllowed.
Доступ к сеансному компоненту посредством прикладного клиента
Для работы приложения требуется только простой метод доступа к сеансному компоненту. Вызов компонента уровня предприятия будет осуществляться посредством аннотации @EJB.
- В окне "Projects" разверните узел "Secure-app-client > Source Packages > secure" и дважды щелкните файл Main.java для его открытия в редакторе исходного кода.
- Щелкните правой кнопкой мыши в редакторе исходного кода и выберите "Enterprise Resources > Call Enterprise Bean".
- Разверните узел "Secure-ejb" в диалоговом окне "Call Enterprise Bean" и выберите "AccountStatusBean". Нажмите кнопку "OK".
В среде IDE к прикладному клиенту добавляется следующий код обнаружения сеансного компонента:
@EJB
private static AccountStatusRemote accountStatusBean;
- Добавьте к телу метода main следующие строки и сохраните изменения:
public static void main(String[] args) {
System.out.println(accountStatusBean.getStatus());
Настройка дескрипторов развертывания
В Java EE 5 для приложений уровня предприятия файлы дескрипторов развертывания, такие как ejb-jar.xml, обычно не требуются. Раскрытие узла "Configuration Files" в "Secure-ejb" или "Secure enterprise application" показывает отсутствие дескрипторов развертывания. Для указания многих свойств, настроенных в ejb-jar.xml, используются аннотации. В данном примере роли безопасности для методов EJB были указаны с помощью аннотации @RolesAllowed в сеансном компоненте.
Однако при настройке безопасности приложения некоторые свойства все равно необходимо указывать в дескрипторах развертывания. В нашем примере требуется установить соответствие ролей безопасности, используемых в приложении уровня предприятия (USERS), с пользователями и группами, настроенными на сервере приложений. На сервере приложений была создана группа bank_users; теперь эту группу необходимо отобразить на роль безопасности USERS в приложении уровня предприятия. Для этого следует внести изменения в дескриптор развертывания приложения уровня предприятия sun-application.xml.
Поскольку приложение уровня предприятия не требует наличия дескрипторов развертывания для выполнения, эти дескрипторы по умолчанию не создаются в среде IDE. Таким образом, сначала необходимо создать дескриптор развертывания, а затем настроить его.
- В главном меню выберите "File > New File" для открытия мастера создания файла. В качестве альтернативы для вызова мастера создания файла можно щелкнуть правой кнопкой мыши проект безопасного приложения уровня предприятия в окне "Projects" и выбрать "New > Other" в появившемся меню.
- В области "Categories" мастера создания файла выберите "GlassFish", а затем тип файла "GlassFish Deployment Descriptor". Нажмите кнопку "Next", а затем "Finish" в следующем окне.
После нажатия кнопки "Finish" в среде IDE создается файл sun-application.xml, который открывается в многоракурсном редакторе дескрипторов развертывания. Для настройки привязок ролей безопасности используется вкладка редактора "Security".
- На вкладке "Security" щелкните "Add Security Role Mapping" и введите USERS в поле "Security Role Name".
- Нажмите кнопку "Add Group", введите bank_users в поле "Group Name" и нажмите кнопку "OK".
- Сохраните изменения.
Для просмотра файла дескриптора развертывания в режиме XML необходимо перейти на вкладку "XML" редактора. Как видно, теперь в файле дескриптора развертывания содержится следующее:
<sun-application>
<security-role-mapping>
<role-name>USERS</role-name>
<group-name>bank_users</group-name>
</security-role-mapping>
</sun-application>
Выполнение приложения
Теперь приложение готово. При запуске проекта появляется запрос на ввод имени пользователя в группе bank_users и пароля.
- Щелкните правой кнопкой мыши узел "Secure project" и выберите "Run project". В результате формируется файл "EAR", запускается сервер приложений (если он еще не запущен), и файл EAR развертывается на сервере приложений. Открывается диалоговое окно с запросом на ввод имени пользователя и пароля.

- Введите в диалоговом окне имя пользователя (manager) и пароль (password), после чего нажмите кнопку "OK". В окне "Output" появится следующее:
The account contains 250$
В этом чрезвычайно упрощенном примере было продемонстрировано обеспечение безопасности отдельно взятого метода в компоненте уровня предприятия с помощью аннотаций Java.
Дополнительная информация
Для получения дополнительных сведений о создании и разработке компонентов уровня предприятия см. следующие материалы:
Для получения дополнительных сведений о разработке приложений для Java EE в среде IDE NetBeans см. следующие материалы:
Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для Java EE с помощью среды IDE NetBeans можно в списке рассылки nbj2ee.