blob: 36d58bd9b87fc3139062a0658c20a453bc3f8de0 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Создание безопасных компонентов EJB в Java EE
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Создание безопасных компонентов EJB в Java EE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Создание безопасных компонентов EJB в Java EE
Поддержка спецификации Java EE в IDE NetBeans позволяет полностью воспользоваться многими преимуществами функций Java EE, что позволит упростить разработку приложений. Значительным улучшением спецификации Java EE 5 было включение аннотаций. Использование аннотаций позволяет устранить множество кода заглушек, используемого при написании кода приложений, и уменьшает объем необходимой настройки при развертывании приложения.
Использование аннотаций значительно упростило разработку и настройку компонентов EJB. Аннотации позволяют указывать множество свойств настройки, которые ранее указывались в файлах дескриптора развертывания, что устраняет необходимость во множестве таких файлов. Хотя для приложений все еще могут требоваться некоторые файлы дескриптора развертывания (например, ``web.xml`` ), редактор дескриптора развертывания с несколькими представлениями среды IDE значительно упрощает изменение файлов.
Аннотации упрощают создание безопасных компонентов EJB. Вместо настройки безопасности компонента EJB в дескрипторе развертывания ``ejb-jar.xml`` можно использовать аннотации безопасности для настройки авторизации непосредственно в исходном коде. Для приложений J2EE Java EE 5 не требуется файл ``ejb-jar.xml`` или ``application.xml`` .
Обзор некоторых функций спецификации Java EE см. в разделе link:javaee-intro.html[+Введение в технологию Java EE+]. Дополнительные сведения о спецификациях аннотаций см. в разделе link:http://jcp.org/en/jsr/detail?id=250[+ JSR 250: общие аннотации для платформы Java+].
*Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.*
|===
|Программное обеспечение или материал |Требуемая версия
|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |Версия 7.2, 7.3, 7.4, 8.0, Java EE
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |версия 7 или 8
|Сервер GlassFish |3.1.x, 4.x
|===
Для этого учебного курса необходимо зарегистрировать локальный экземпляр сервера GlassFish в среде IDE. Если на вашем компьютере установлена версия 'Java EE' среды IDE, сервер приложений должен быть уже установлен и зарегистрирован. Если сервер приложений не зарегистрирован в среде IDE, выберите "Сервис > Серверы", чтобы зарегистрировать сервер в диспетчере серверов. Приложения масштаба предприятия нельзя развернуть на веб-сервере Tomcat.
*Предпосылки*
Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:
* Программирование на Java
* IDE NetBeans
== Создание группы безопасности на сервере приложений
В этом примере доступ к компоненту EJB необходимо предоставить только пользователям из группы ``bank_users`` . Будет создан пользователь ``manager`` в группе ``bank_users`` в области безопасности ``file`` на сервере приложений.
1. Запустите сервер приложений, щелкнув правой кнопкой мыши его узел в окне 'Службы' и выбрав 'Пуск'.
2. Правой кнопкой мыши щелкните узел сервера приложений и выберите 'Просмотр консоли администратора домена', чтобы открыть консоль администрирования сервера GlassFish в браузере.
3. Разверните узел *server-config* в узле "Настройка" на левой панели переходов.
4. Щелкните *Безопасность > Области > файл*, чтобы открыть окно "Изменить область".
image::images/console-file-realm.png[title="Выбор узла области файла на консоли администрирования сервера приложений"]
. Нажмите кнопку "Управление пользователями" в верней участи панели "Редактировать область", чтобы открыть панель "Изменить область".
image::images/console-edit-realm.png[title="Узел панели 'Изменить область' на консоли администрирования сервера приложений"]
. Нажмите кнопку "Новый" в верхней части таблицы "Пользователи файлов" на панели "Пользователи файлов".
. Введите следующие данные в форму "Новый пользователь области файлов". Нажмите кнопку "ОК".
|===
|Имя |Значение
|Идентификатор пользователя |диспетчер
|Список групп |bank_users
|Пароль |"password" пароль
|===
Форма должна быть схожей со следующим изображением.
image::images/console-new-user.png[title="Панель 'Создать пользователя области файла' на консоли администрирования сервера приложений"]
При нажатии кнопки "ОК" сервер создает пользователя и открывает панель "Пользователи файлов". Можно заметить, что появился пользователь с именем ``manager`` .
image::images/console-file-users.png[title="Панель 'Пользователи файлов' на консоли администрирования со списком пользователей"]
Теперь, после создания пользователя, будет создано приложение J2EE для проверка возможности пользователя просматривать данные.
== Создание библиотеки классов Java для удаленного интерфейса
В этом упражнении будет создан простой проект библиотеки классов Java, содержащий удаленные интерфейсы для сеансного компонента. Скомпилированный файл JAR библиотеки классов будет добавлен к пути к классам в модуле EJB и к клиенту приложения, который будет использоваться для вызова сеансного компонента.
1. Выберите "Файл > Новый проект", затем выберите "Библиотека классов Java" в категории "Java". Нажмите кнопку "Далее".
2. Введите SecureRemoteInterface для имени проекта.
3. Укажите местоположение проекта. Нажмите кнопку 'Готово'.
В следующем разделе будет создан сеансный компонент в приложении J2EE. Доступ к сеансному компоненту будет осуществляться через удаленный интерфейс. При создании сеансного компонента среда IDE автоматически создаст удаленный интерфейс в библиотеке классов и добавить JAR библиотеки классов к пути к классам приложения J2EE.
== Создание и защита приложения J2EE
Приложение J2EE будет состоять из простого сеансного компонента, доступного через удаленный интерфейс в проекте библиотеки классов.
=== Создание проекта приложения J2EE
В этом упражнении будет создано приложение J2EE, содержащее модуль EJB.
1. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N; ⌘-Shift-N on Mac), а затем в категории Java EE выберите шаблон 'Корпоративное приложение'. Нажмите кнопку "Далее".
2. Введите *Secure* для названия проекта и выберите его местоположение.
3. Снимите флажок "Использовать отдельную папку", если он установлен.
В рамках этого руководства копирование библиотек проекта в выделенную папку не целесообразно, поскольку совместное использование библиотек с другими пользователями или проектами не требуется.
Нажмите кнопку "Далее".
. Установите сервер GlassFish, затем для параметра "Версия Java EE" выберите "Java EE 6".
. Выберите "Создать модуль EJB" и отмените выбор "Создать модуль веб-приложения". Нажмите кнопку 'Готово'.
image::images/new-entapp-wizard.png[title="Панель 'Создать пользователя области файла' на консоли администрирования сервера приложений"]
=== Обеспечение безопасности метода в сеансном компоненте
В этом упражнении будет создан сеансный компонент в проекте модуля EJB. Сеансный компонент не выполняет ничего сверхъестественного. Он просто возвращает пример суммы баланса. Будет создан метод ``getStatus`` , который будет защищен методом компонента путем добавлении аннотации ``@RolesAllowed`` и указания ролей безопасности, которым разрешен доступ к методу. Эта роль безопасности используется приложением и не совпадает с пользователями и группами на сервере. Можно сопоставить роль безопасности с пользователями и группами позже при настройке дескрипторов развертывания.
Аннотации безопасности могут применяться индивидуально к каждому методу в классе или ко всему классу. В этом простом упражнении будет использоваться ``@RolesAllowed`` для аннотации метода, но спецификация Java EE определяет другие аннотации безопасности, которые могут использоваться в компонентах EJB.
1. В окне 'Проекты' щелкните правой кнопкой мыши узел модуля EJB (Secure-ejb) и выберите 'Создать' > 'Компонент Bean сеанса'.
2. Введите *AccountStatus* для имени базового компонента, *bean* для пакета.
3. Выберите "Удаленный интерфейс в проекте" для типа интерфейса.
4. Выберите SecureRemoteInterface в раскрывающемся списке. Нажмите кнопку "Готово".
image::images/new-sessionbean-wizard.png[title="Удаленный интерфейс выбран в мастере создания компонентов сеансов"]
При нажатии кнопки "Готово" среда IDE создает класс ``AccountStatus`` и открывает файл в редакторе исходного кода.
Среда IDE также создает удаленный интерфейс ``AccountStatusRemote`` для базового элемента в пакете ``bean`` в проекте библиотеки классов SecureRemoteInterface и добавленном JAR библиотеки классов SecureRemoteInterface к пути к классам проекта модуля EJB.
image::images/projects-window-bean.png[title="Окно 'Проекты', в котором отображаются компонент сеанса и библиотека классов на пути к классу"]
При открытии категории "Библиотеки" диалогового окна "Свойства" модуля EJB можно заметить, что JAR добавлен к библиотеке для компиляции.
. В редакторе исходного кода добавьте следующее объявление поля (полужирным шрифтом) к ``AccountStatus`` :
[source,java]
----
public class AccountStatus implements AccountStatusRemote {
*private String amount = "250";*
----
. В редакторе исходного кода щелкните правой кнопкой мыши в классе и выберите 'Вставить код' (Alt-Insert; Ctrl-I в Mac), а затем выберите 'Добавить бизнес-метод', чтобы открыть диалоговое окно 'Добавить бизнес-метод'.
. Введите *getStatus* в качестве имени метода, затем установите для типа возвращаемого значения ``String`` .
Среда IDE автоматически открывает бизнес-метод в удаленном интерфейсе.
. В редакторе исходного кода добавьте следующую строку с полужирным шрифтом к методу ``getStatus`` .
[source,java]
----
public String getStatus() {
* return "The account contains $" + amount;*
}
----
. Введите следующее (полужирным шрифтом) для аннотации метода ``getStatus`` .*@RolesAllowed({"USERS"})*
[source,java]
----
public String getStatus() {
----
Эта аннотация означает, что только пользователям с ролью безопасности ``USERS`` доступен метод ``getStatus`` .
. Щелкните правой кнопкой мыши в области редактора и выберите команду 'Исправить операторы импорта' (Alt-Shift-I; ⌘-Shift-I в Mac) и сохраните изменения. Убедитесь, что к файлу добавлено ``javax.annotation.security.RolesAllowed`` .
=== Настройка дескрипторов развертывания
Для приложений J2EE Java EE обычно не требуются файлы дескриптора развертывания, такие как ``ejb-jar.xml`` . Если развернуть узел "Файлы настройки" в Secure-ejb или безопасном приложении J2EE, можно увидеть, что дескрипторы развертывания отсутствуют. Аннотации можно использоваться для указания множества свойств, настроенных в ``ejb-jar.xml`` . В том примере были указаны роли безопасности для методов EJB, используя аннотации ``@RolesAllowed`` в сеансном компоненте.
Однако при настройке безопасности для приложения требуется указать некоторые свойства в дескрипторах развертывания. В этом примере необходимо сопоставить роли безопасности, используемые в приложении J2EE( ``USERS`` ), с пользователями и группами, настроенными на серверами приложений. Была создана группа ``bank_users`` на сервере приложений, и необходимо сопоставить эту группу с ролью безопасности ``USERS`` в приложении J2EE. Для этого необходимо изменить дескриптор развертывания ``glassfish-application.xml`` для приложения J2EE.
Поскольку для запуска приложения J2EE не требуются дескрипторы развертывания, среда IDE не создала дескрипторы развертывания по умолчанию. Поэтому сначала необходимо создать файл дескриптора развертывания, затем отредактировать файл в редакторе с несколькими представлениями для настройки сопоставлений роли безопасности.
1. Правой кнопкой мыши щелкните проект безопасного приложения J2EE и выберите "Новый > Другое", чтобы открыть мастер "Создание файла".
Также можно открыть мастер "Создание файла", выбрав "Файл > Создание файла" в главном меню. В этом случае необходимо выбрать проект "Безопасность" в раскрывающемся списке "Проект".
. Выберите тип файла "Дескриптор GlassFish" в категории GlassFish. Нажмите кнопку "Далее".
image::images/new-gf-descriptor.png[title="Тип файла дескриптора GlassFish в мастере создания файлов"]
. Примите значения по умолчанию в мастере и щелкните "Готово".
При нажатии кнопки "Готово" среда IDE создает файл ``glassfish-application.xml`` и открывает его в редакторе исходного кода с несколькими представлениями.
Если развернуть узел проекта приложения J2EE "Безопасность" в окне "Проекты", можно увидеть, что файл дескриптора создан в узле "Файлы настройки".
image::images/glassfish-application-descriptor.png[title="Вкладка 'Безопасность' в редакторе с несколькими представлениями "]
. На вкладке "Безопасность" редактора с несколькими представлениями щелкните "Добавить сопоставление роли безопасности" и введите *USERS* для параметра "Имя роли безопасности".
. Щелкните "Добавить группу" и введите *bank_users* для параметра "Имя группы" в диалоговом окне. Нажмите кнопку "ОК".
Теперь текст в редакторе должен быть схож со следующим.
image::images/security-tab-descriptor.png[title="Вкладка 'Безопасность' в редакторе с несколькими представлениями "]
. Сохраните изменения.
Можно щелкнуть вкладку "XML" в редакторе с несколькими представлениями, чтобы просмотреть файл дескриптора развертывания в представлении XML. Теперь этот файл дескриптора развертывания содержит следующий текст:
[source,xml]
----
<glassfish-application>
<security-role-mapping>
<role-name>USERS</role-name>
<group-name>bank_users</group-name>
</security-role-mapping>
</glassfish-application>
----
Теперь метод ``getStatus`` безопасен и доступен только пользователям в группе ``bank_users`` , указанной на сервере.
Теперь требуется способ проверки параметров безопасности. Проще всего создать базовый клиент приложения, запрашивающий у пользователя ввод имени пользователя и пароля.
== Создание клиента приложения
В этом разделе будет создан простой клиент приложения для доступа к сеансному компоненту ``AccountStatus`` . Аннотация ``@EJB`` в коде будет использоваться для вызова базового элемента через удаленный интерфейс, а среда IDE автоматически добавит файл JAR библиотеки классов, содержащий интерфейс клиента приложения.
1. Выберите Файл > Создать проект и затем выберите "Клиент корпоративного приложения" в категории Java EE. Нажмите кнопку "Далее".
2. Введите SecureAppClient в качестве имени проекта. Нажмите кнопку "Далее".
3. Выберите *<Нет>* в раскрывающемся списке "Добавить в приложение J2EE".
4. Выберите 'GlassFish Server' в списке 'Сервер' и 'Java EE 6' или 'Java EE 7' в списке 'Версия Java EE'. Нажмите кнопку "Готово".
После нажатии кнопки "Готово" в редакторе исходного кода откроется ``Main.java`` .
. В редакторе исходного кода щелкните правой кнопкой мыши в файле ``Main.java`` и выберите 'Вставить код' (Alt-Insert; Ctrl-I в Mac) и выберите 'Call Enterprise Bean'.
. В диалоговом окне "Вызов компонента EJB" разверните узел Secure-ejb и выберите AccountStatus. Нажмите кнопку "ОК".
image::images/call-enterprise-bean.png[title="интерфейс, выбранный в диалоговом окне 'Вызвать компонент корпоративного уровня'"]
Среда IDE добавляет следующий код к клиенту приложения для поиска сеансного компонента.
[source,java]
----
@EJB
private static AccountStatusRemote accountStatus;
----
Если развернуть узел "Узел" в окне "Проекты", можно увидеть, что среда IDE добавила файл JAR SecureRemoteInterface к пути к классам проекта.
. Измените метод ``main`` , чтобы добавить следующий код и сохранить изменения.
[source,java]
----
public static void main(String[] args) {
*System.out.println(accountStatus.getStatus());*
}
----
Дополнительные сведения о клиентах приложений приведены в разделе link:entappclient.html[+Создание и запуск клиентов приложений на сервере GlassFish+].
== Выполнение приложения
Теперь приложение готово. Сначала необходимо развернуть приложение J2EE на сервере. После развертывания приложения J2EE можно запустить клиент приложения для проверки безопасности метода в приложении J2EE и правильности сопоставления ролей пользователей. После запуска клиента приложения появится запрос на ввод имени пользователя и пароля для пользователя в группе ``bank_users`` .
1. Правой кнопкой мыши щелкните узел проекта приложения J2EE "Безопасность" в окне "Проекты" и выберите "Развернуть".
При нажатии кнопки "Развернуть" среда IDE создает файл EAR, запускает сервер приложений (если он еще не запущен) и выполняет развертывание файла EAR на сервере.
. Правой кнопкой мыши щелкните узел проекта SecureAppClient в окне "Проект" и выберите "Выполнить". Появится диалоговое окно с запросом на ввод имени пользователя и пароля.
image::images/login-window.png[title="Окно входа с запросом на ввод имени пользователя и пароля"]
. В диалоговом окне введите имя пользователя ( ``manager`` ) и пароль ( ``password`` ) и нажмите кнопку "ОК". В окне вывода появится следующее.
[source,java]
----
The account contains 250$
----
Этот очень простой пример демонстрирует использование аннотаций Java для защиты метода в компоненте EJB.
link:/about/contact_form.html?to=3&subject=Feedback:%20Building%20Secure%20Enterprise%20Beans[+Отправить отзыв по этому учебному курсу+]
== Дополнительные сведения
Дополнительные сведения об использовании аннотаций и дескрипторов развертывания для защиты компонентов можно найти в следующих ресурсах:
* Главы link:http://docs.oracle.com/javaee/7/tutorial/doc/security-intro003.htm[+Защита контейнеров+] и link:http://docs.oracle.com/javaee/7/tutorial/doc/security-advanced008.htm[+Настройка параметров безопасности с помощью дескрипторов развертывания+] в разделе link:http://docs.oracle.com/javaee/7/tutorial/doc/partsecurity.htm[+Безопасность+] практического руководства по Java EE 7
Дополнительные сведения об использовании IDE NetBeans для разработки приложений Java EE см. следующие ресурсы:
* link:javaee-intro.html[+Введение в технологию Java EE +]
* link:javaee-gettingstarted.html[+Начало работы с приложениями Java EE+]
* link:../../trails/java-ee.html[+Учебная карта по Java EE и Java Web+]
Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с Java EE IDE NetBeans link:../../../community/lists/top.html[+присоединяйтесь к списку рассылки nbj2ee+].