// 
//     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.
//

= Обеспечение защиты веб-приложения в IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Обеспечение защиты веб-приложения в IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Обеспечение защиты веб-приложения в IDE NetBeans

Составитель – Дэн Колар (Dan Kolar). Обновляется Джеймсом Бранэмом (James Branam) и Джеффом Рубиноффом (Jeff Rubinoff).

Данный документ освещает основы добавления функций безопасности к веб-приложению, развернутому на сервере Oracle GlassFish Open Source Edition, Oracle WebLogic или Apache Tomcat.

В данном документе показано, как настроить проверку подлинности на компьютере с помощью простого окна входа и формы входа на веб-странице. В данном документе дан обзор действий для создания пользователей на сервере Tomcat и сервере GlassFish. После создания пользователей мы создадим роли безопасности, установив свойства безопасности в дескрипторе развертывания. Данный документ также показывает, как можно использовать проверку подлинности JDBC для обеспечения безопасности приложения при развертывании на сервере GlassFish.

*Ожидаемая продолжительность: _40_ минут*


image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"]


*Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.*

|===
|Программное обеспечение или материал |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |Версия Java EE 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |Версия 7 или 8 

|Платформа Java EE |Java EE 6 или 7 

|База данных TRAVEL |Не требуется 

|Веб-сервер или сервер приложений, совместимый с Java EE |Веб-сервер Tomcat 7.x или 8.x, Oracle WebLogic 11g или
GlassFish Server Open Source Edition 4.x 
|===


== Установка и настройка рабочей среды

Установите и запустите IDE NetBeans. С данным учебным курсом можно работать, используя имеющийся в комплекте среды сервер Tomcat или сервер GlassFish.

Убедитесь, что сервер установлен и экземпляр сервера зарегистрирован в среде IDE. Для регистрации установленного экземпляра сервера можно использовать диспетчер серверов. (Выберите Tools ("Сервис") > Servers ("Серверы") > Add Server ("Добавить сервер"). Выберите "GlassFish Server <номер версии>" или "Tomcat <номер версии> и нажмите кнопку Next ("Далее"). Нажмите кнопку Browse ("Обзор") и найдите каталог установки сервера приложений. Нажмите кнопку Finish ("Готово").)


==  Создание веб-приложения

Мы начнем это упражнение с создания проекта веб-приложения и структуры каталогов. Затем мы создадим несколько простых файлов  ``html``  в каждом из безопасных каталогов. Созданное веб-приложение использует простую проверку подлинности при входе, чтобы предотвратить несанкционированный доступ к защищенным каталогам. Если для проверки подлинности нужно использовать форму входа, то можно добавить страницу  ``jsp``  с формой.


=== Создание безопасных каталогов

1. Выберите Файл > Создать проект (Ctrl-Shift-N), затем выберите 'Веб-приложение' в категории 'Веб' и нажмите 'Далее'.
2. Назовите проект  ``WebApplicationSecurity`` . Примите параметры по умолчанию.
3. Установите флажок "Использовать отдельную папку для хранения библиотек" и укажите местоположение папки библиотек (необязательно). Дополнительные сведения об этой функции см. в разделе link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG455[+Предоставление общего доступа к библиотеке другим пользователям+] в документе _Разработка приложений в IDE NetBeans_.
4. Нажмите кнопку "Далее".
5. Выберите сервер, на котором требуется выполнить развертывание приложения. В списке представлены только те серверы, которые зарегистрированы в среде IDE. Нажмите кнопку "Далее".
6. В добавлении платформы нет необходимости, так что нажмите кнопку Finish ("Готово").
7. Если создано приложение EE 6 перейдите в окно 'Проекты' среды IDE, щелкните правой кнопкой мыши узел проекта и выберите 'Создать' > 'Другие' > Web > 'Стандартный дескриптор развертывания' (web.xml). Пройдите по этапам работы мастера, принимая параметры по умолчанию.

*Примечание.* В этом учебном курсе показано, как настроить параметры безопасности в дескрипторе развертывания, но приложения EE 6 и EE 7 по умолчанию используют аннотации вместо дескриптора развертывания.


[start=8]
. При использовании сервера GlassFish или WebLogic и IDE NetBeans 7.0.1 или более поздней версии необходимо создать дескриптор для этого сервера. Щелкните правой кнопкой мыши узел проекта и выберите New ("Создать") > Other ("Другое") > GlassFish > GlassFish Descriptor ("Дескриптор GlassFish"), либо New ("Создать") > Other ("Другое") > WebLogic > WebLogic Descriptor ("Дескриптор WebLogic"). Откроется диалоговое окно создание дескриптора для конкретного сервера. Примите параметры по умолчанию и нажмите кнопку "Готово". Дескриптор для конкретного сервера, именуемый  ``glassfish-web.xml``  либо  ``weblogic.xml`` , появится в папке Configuration Files ("Файлы настройки") проекта.

[start=9]
. В окне 'Проекты' в IDE щелкните правой кнопкой мыши 'Веб-страницы' и выберите 'Создать' > 'Другое'.

[start=10]
. В мастере создания новых файлов выберите Other ("Другое") в качестве категории и Folder ("Папка") в качестве типа файла. Нажмите кнопку "Далее".

[start=11]
. 
В мастере создания новых папок назовите папку secureAdmin и нажмите кнопку Finish ("Готово").

Папка secureAdmin появится в окне Projects ("Проекты"), в папке Web Pages ("Веб-страницы").

[start=12]
. Повторите 3 предыдущих действия для создания еще одной папки, именуемой secureUser.

[start=13]
. Создайте новый файл  ``html``  в папке secureUser. Для этого щелкните правой кнопкой мыши папку secureUser в окне 'Проекты' и выберите Создать > Другие.

[start=14]
. В категории 'Другие' выберите тип файла HTML. Нажмите кнопку "Далее".

[start=15]
. Назовите новый файл pageU и нажмите кнопку Finish ("Готово").

При нажатии этой кнопки файл  ``pageU.html``  откроется в редакторе файлов исходного кода.


[start=16]
. В редакторе файлов исходного кода замените существующий код в файле  ``pageU.html``  следующим кодом.[html-tag]#<html>
   <head>
      <title>#

[source,xml]
----

User secure area[html-tag]#</title>
   </head>
   <body>
      <h1>#User Secure Area[html-tag]#</h1>
   </body>
</html>#
----

[start=17]
. Щелкните правой кнопкой мыши папку secureAdmin и создайте новый файл ``html``  под названием pageA.

[start=18]
. В редакторе файлов исходного кода замените существующий код в  ``pageA.html``  следующим кодом.[html-tag]#<html>
   <head>
      <title>#

[source,xml]
----

Admin secure area[html-tag]#</title>
   </head>
   <body>
      <h1>#Admin secure area[html-tag]#</h1>
   </body>
</html>#
----


=== Создание страницы индекса JSP

Теперь мы создадим страницу индекса JSP, содержащую ссылки на безопасные области. Если пользователь щелкнет такую ссылку, у него будут запрошены имя пользователя и пароль. В случае использования простого входа будет выведено окно входа по умолчанию используемого браузера. В случае использования страницы формы входа пользователь вводит имя пользователя и пароль в форму.

1. Откройте  ``index.jsp``  в редакторе файлов исходного кода и добавьте следующие ссылки на  ``pageA.html``  и  ``pageU.html`` :[jsp-html-tag]#<p>#

[source,html]
----

Request a secure Admin page [jsp-html-tag]#<a# [jsp-html-argument]#href=#[jsp-xml-value]#"secureAdmin/pageA.html"#[jsp-html-tag]#>#here![jsp-html-tag]#</a></p>
<p>#Request a secure User page [jsp-html-tag]#<a# [jsp-html-argument]#href=#[jsp-xml-value]#"secureUser/pageU.html"# [jsp-html-tag]#>#here![jsp-html-tag]#</a></p>#
----

[start=2]
. Сохраните изменения.


=== Создание формы входа (обязательно для сервера Tomcat, не обязательно для сервера GlassFish или WebLogic)

Если вместо простого входа желательно использовать форму входа, то можно создать страницу  ``jsp`` , содержащую форму. После этого можно указать страницы входа и ошибки при входе, в ходе <<Basic_login_config,настройки метода входа>>.

*Важно!* Для пользователей Tomcat создание формы входа обязательно.

1. В окне 'Проекты' щелкните правой кнопкой мыши папку 'Веб-страницы' и выберите 'Создать' > JSP.
2. Назовите файл  ``login`` , оставьте значения по умолчанию для остальных полей и нажмите кнопку Finish ("Готово").
3. В редакторе файлов исходного кода вставьте следующий код между тегами  ``<body>``   ``login.jsp`` .

[source,xml]
----

<[jsp-html-tag]#form# [jsp-html-argument]#action=#[jsp-xml-value]#"j_security_check"# [jsp-html-argument]#method=#[jsp-xml-value]#"POST"#[jsp-html-tag]#>#
   Username:[jsp-html-tag]#<input# [jsp-html-argument]#type=#[jsp-xml-value]#"text"# [jsp-html-argument]#name=#[jsp-xml-value]#"j_username"#[jsp-html-tag]#><br>#
   Password:[jsp-html-tag]#<input# [jsp-html-argument]#type=#[jsp-xml-value]#"password"# [jsp-html-argument]#name=#[jsp-xml-value]#"j_password"#[jsp-html-tag]#>
   <input# [jsp-html-argument]#type=#[jsp-xml-value]#"submit"# [jsp-html-argument]#value=#[jsp-xml-value]#"Login"#[jsp-html-tag]#>
</form>#
----

[start=4]
. Создайте новый файл  ``html``  под названием  ``loginError.html``  в папке Web Pages ("Веб-страницы"). Это простая страница ошибки.

[start=5]
. В редакторе файлов исходного кода замените существующий код в  ``loginError.html``  следующим кодом.[html-tag]#<html>
    <head>
        <title>#

[source,xml]
----

Login Test: Error logging in[html-tag]#</title>
    </head>
    <body>
        <h1>#Error Logging In[html-tag]#</h1>
        <br/>
    </body>
</html>#
----


== Создание пользователей на целевом сервере

Чтобы в веб-приложениях можно было использовать безопасность на основе проверки подлинности с помощью имени пользователя и пароля (простой вход или вход на основе формы), для целевого пользователя необходимо определить пользователей и соответствующие роли для них. Для входа в систему на сервере на этом сервере должна существовать учетная запись пользователя.

Определения пользователей и ролей варьируются в зависимости от указанного целевого сервера. В данном руководстве для тестирования параметров безопасности используются определения  ``admin``  и  ``user`` . Необходимо подтвердить, что эти пользователи существуют на соответствующих серверах и что им назначены соответствующие роли.


=== Определение пользователей на сервере GlassFish

В этом сценарии нам нужно использовать консоль администрирования сервера GlassFish для создания двух новых пользователей,  ``user``  и  ``admin`` . У пользователя  ``user``  будет ограниченный доступ к приложению, а у пользователя  ``admin``  – права администратора.

1. Откройте консоль администрирования. Для этого перейдите в окно 'Службы' среды IDE и щелкните правой кнопкой мыши Серверы > Сервер GlassFish > Просмотр консоли администратора домена. В окне браузера откроется страница входа в систему сервера GlassFish. Для доступа к консоли администрирования необходимо войти, используя имя и пароль администратора.

*Примечание. * До получения доступа к консоли администрирования необходимо запустить сервер приложений. Чтобы запустить сервер, щелкните правой кнопкой мыши узел сервера GlassFish и выберите 'Пуск'.


[start=2]
. В консоли администрирования перейдите к Configurations ("Настройки") > server-config > Security ("Безопасность") > Realms ("Области") > File ("Файл"). Откроется панель редактирования области.

image::images/edit-realm.png[]

[start=3]
. Нажмите кнопку Manage Users ("Управлять пользователями") наверху панели редактирования области. Откроется панель File Users ("Пользователи файла").

image::images/file-users.png[]

[start=4]
. Нажмите кнопку New ("Создать"). Откроется панель New File Realm User ("Новый пользователь области файла"). Введите  ``user``  в качестве идентификатора пользователя и  ``userpw01``  в качестве пароля. Нажмите кнопку "ОК".

[start=5]
. Выполните приведенные выше действия, чтобы создать пользователя  ``admin``  с паролем  ``adminpw1``  в области  ``file`` .


=== Определение ролей и пользователей на сервере Tomcat

При использовании Tomcat 7 создается пользователь с ролью сценария диспетчера и пароль для этого пользователя при регистрации сервера в IDE NetBeans.

Базовые пользователи и роли для сервера Tomcat содержатся в  ``tomcat-users.xml`` . Файл  ``tomcat-users.xml``  можно найти в каталоге  ``_<CATALINA_BASE>_\conf`` .

*Примечание.* Расположение CATALINA_BASE можно определить, щелкнув правой кнопкой мыши узел сервера Tomcat в окне 'Службы' и выбрав 'Свойства'. Откроется окно свойств сервера. CATALINA_BASE расположен во вкладке Connection ("Подключение").

image::images/tomcat-properties.png[] image::images/catalina-base.png[]

*Примечание.* Если Tomcat 6 используется вместе с более ранними версиями IDE, этот сервер имеет  ``ide`` , определенные пользователем с помощью пароля и администратора и диспетчера ролей. Пароль для пользователя  ``ide``  создается при установке Tomcat 6. Пароль для пользователя  ``ide``  можно изменить, либо скопировать его в  ``tomcat-users.xml`` .

*Для добавления пользователей в Tomcat выполните следующие действия.*

1. Откройте в редакторе  ``_<CATALINA_BASE>_/conf/tomcat-users.xml`` .
2. Добавьте роль под названием  ``AdminRole`` .

[source,java]
----

<role rolename="AdminRole"/>
----

[start=3]
. Добавьте роль под названием  ``UserRole`` .

[source,java]
----

<role rolename="UserRole"/>
----

[start=4]
. Добавьте пользователя с именем  ``admin`` , паролем  ``adminpw1``  и ролью  ``AdminRole`` .

[source,java]
----

<user username="admin" password="adminpw1" roles="AdminRole"/>
----

[start=5]
. Добавьте пользователя с именем  ``user`` , паролем  ``userpw01``  и ролью  ``UserRole`` .

[source,java]
----

<user username="user" password="userpw01" roles="UserRole"/>
----

Файл  ``tomcat-users.xml``  теперь выглядит следующим образом:


[source,xml]
----

<tomcat-users>
<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
-->
...
<role rolename="AdminRole"/>
<role rolename="UserRole"/>
<user username="user" password="userpw01" roles="UserRole"/>
<user username="admin" password="adminpw1" roles="AdminRole"/>
[User with manager-script role, defined when Tomcat 7 was registered with the IDE]
...
</tomcat-users>
----


=== Определение ролей и групп на сервере WebLogic

В этой ситуации нам нужно использовать консоль администрирования сервера WebLogic для создания двух новых пользователей,  ``user``  и  ``admin`` . Добавьте этих пользователей к группам  ``userGroup``  и  ``adminGroup``  соответственно. Позже можно будет назначить роли безопасности для этих групп. У  ``userGroup``  будет ограниченный доступ к приложению, а у  ``adminGroup``  – права администратора.

Общие инструкции по добавлению пользователей и групп к серверу Web Logic можно найти в link:http://download.oracle.com/docs/cd/E21764_01/apirefs.1111/e13952/taskhelp/security/ManageUsersAndGroups.html[+Интерактивной справке по консоли администрирования+] WebLogic.

*Чтобы добавить пользователей и группы "user" и "admin" к WebLogic, выполните следующие действия:*

1. Откройте консоль администрирования, перейдя в окно 'Службы' среды IDE и щелкнув правой кнопкой мыши 'Серверы' > 'Сервер WebLogic' > 'Просмотр консоли администратора'. В окне браузера откроется страница входа в систему сервера GlassFish. Для доступа к консоли администрирования необходимо войти, используя имя и пароль администратора.

*Примечание. * До получения доступа к консоли администрирования необходимо запустить сервер приложений. Чтобы запустить сервер, щелкните правой кнопкой мыши узел сервера WebLogic и выберите 'Пуск'.


[start=2]
. В левой панели выберите Security Realms ("Области безопасности"). Откроется страница сводки областей безопасности.

[start=3]
. На этой странице выберите имя области безопасности (имя по умолчанию – "myrealm"). Откроется страница Settings for Realm Name ("Настройки имени области").

[start=4]
. На этой странице выберите Users and Groups ("Пользователи и группы") > Users ("Пользователи"). Появится таблица пользователей.

[start=5]
. В таблице пользователей щелкните New ("Создать"). Откроется страница создания нового пользователя.

[start=6]
. Введите там имя "user" и пароль "userpw01". Если хочется, введите описание пользователя. Примите поставщика проверки подлинности по умолчанию. 

image::images/wl-admin-newuser.png[]

[start=7]
. Нажмите кнопку "ОК". Мы вернемся к таблице пользователей.

[start=8]
. Щелкните New ("Создать") и добавьте пользователя с именем"admin" и паролем "admin1".

[start=9]
. Откройте вкладку Groups ("Группы"). Появится таблица групп.

[start=10]
. Нажмите кнопку New ("Создать"). Откроется окно создания новой группы.

[start=11]
. Назовите группу userGroup. Примите поставщика по умолчанию и нажмите кнопку "OK". Это вернет нас к таблице групп.

[start=12]
. Щелкните New ("Создать") и создайте группу adminGroup.

[start=13]
. Откройте вкладку Users ("Пользователи") для следующей процедуры.

Теперь добавьте пользователя  ``admin``  к  ``adminGroup``  и пользователя  ``user``  к  ``userGroup`` .

Для добавления пользователей к группам:

1. На вкладке Users ("Пользователи") щелкните пользователя  ``admin`` . Откроется страница параметров пользователя.
2. На этой странице откройте вкладку Groups ("Группы").
3. В таблице Parent Groups: Available: ("Родительские группы: Доступные") выберите  ``adminGroup`` .
4. Щелкните стрелку вправо >.  ``adminGroup``  появится в таблице Parent Groups: Chosen: ("Родительские группы: Выбранные:"). 

image::images/wl-admin-usersettings.png[]

[start=5]
. Нажмите кнопку "Сохранить".

[start=6]
. Вернитесь на вкладку Users ("Пользователи").

[start=7]
. Щелкните пользователя  ``user``  и добавьте его к  ``userGroup`` .


== Настройка метода входа

При настройке метода входа для приложения для проверки подлинности при простом входе можно использовать окно входа, предоставляемое браузером. Либо можно создать веб-страницу с формой входа. Оба типа проверки подлинности при входе основаны на использовании имени пользователя/пароля.

Для настройки входа следует создать _ограничения безопасности _и назначить роли этим ограничениям безопасности. Ограничения безопасности определяют набор файлов. При назначении роли ограничению безопасности пользователи с этой ролью получат доступ к набору файлов, определенных ограничением. Для примера, в этом учебном курсе мы назначаем AdminRole ограничению AdminConstraint, а ограничению UserConstraint – и UserRole и AdminRole. Это означает, что у пользователей с AdminRole будет доступ к файлам и для администраторов и для простых пользователей, а у пользователей с UserRole – только к файлам для пользователей.

*Примечание.* Доступ с отдельной ролью администратора к файлам пользователя предоставляется редко. Как вариант, можно назначить UserConstraint только UserRole, а на стороне сервера предоставить AdminRole конкретным пользователям, которые также являются администраторы. Лучший способ предоставления доступа зависит от конкретной ситуации.

Настройка метода входа для приложения выполняется посредством настройки  ``web.xml`` . Файл  ``web.xml``  может быть найден в каталоге Configuration Files ("Файлы конфигурации") окна Projects ("Проекты").


=== Простой вход

При использовании простого входа окно входа предоставляется браузером. Для доступа к защищенному содержимому необходимы правильные имя пользователя и пароль.

Ниже показано, как настроить простой вход для серверов GlassFish и WebLogic. Пользователям Tomcat необходимо использовать <<form-login,форму входа>>.

*Для настройки простого входа выполните следующие действия.*

1. В окне 'Проекты' разверните узел 'Файлы конфигурации' и дважды щелкните  ``web.xml`` . В визуальном редакторе откроется файл  ``web.xml`` .
2. Щелкните Security ("Безопасность") на панели инструментов, чтобы открыть файл в представлении безопасности.
3. Разверните узел Login Configuration ("Конфигурация входа") и установите настройку входа на Basic ("Простая").

*Примечание. * Если необходимо использовать формы, выберите 'Форма', а не 'Основные' и укажите имя входа и страницы входа с ошибками.


[start=4]
. Введите имя области, в зависимости от используемого сервера.
* *GlassFish:* введите  ``file``  в поле Realm Name ("Имя области"). Это имя области по умолчанию при создании пользователей на сервере GlassFish.
* *Tomcat:* не вводите имя области.
* *WebLogic:* введите имя своей области. Областью по умолчанию является  ``myrealm`` .

image::images/security-roles.png[]

[start=5]
. Разверните узел Security Roles ("Роли безопасности") и нажмите кнопку Add ("Добавить") для добавления имени роли.

[start=6]
. Добавьте следующие роли безопасности:
*  ``AdminRole`` . Пользователи, добавленные к этой роли, получат доступ к каталогу  ``secureAdmin``  на сервере.
*  ``UserRole`` . Пользователи, добавленные к этой роли, получат доступ к каталогу  ``secureUser``  на сервере.

*Внимание!* Имена ролей GlassFish должны начинаться с прописной буквы.


[start=7]
. Создайте и настройте ограничение безопасности под названием  ``AdminConstraint`` , выполнив следующее:
1. Щелкните Add Security Constraint ("Добавить ограничение безопасности"). Появится раздел для нового ограничения безопасности.
2. Введите  ``AdminConstraint``  в качестве Display Name ("Отображаемое имя") нового ограничения безопасности.

image::images/admin-constraint.png[]

[start=3]
. Нажмите кнопку "Add". Откроется диалоговое окно Add Web Resource ("Добавление веб-ресурса").

[start=4]
. 
В этом диалоговом окне установите Resource Name ("Имя ресурса") на  ``Admin``  и шаблон URL на  ``/secureAdmin/*`` , после чего нажмите кнопку "OK". Диалоговое окно закроется.

*Примечание. * При использовании звездочки (*), пользователю предоставляется доступ ко всем файлам в этой папке.

image::images/addwebresource.png[]

[start=5]
. Выберите Enable Authentication Constraint ("Включить ограничение проверки подлинности") и нажмите кнопку Edit ("Изменить"). Откроется диалоговое окно изменения имен роли.

[start=6]
. В этом окне выберите AdminRole на левой панели, нажмите кнопку Add ("Добавить"), затем нажмите кнопку OK.

После завершения этих действий результат должен быть подобен этому рисунку:

image::images/constraints.png[]

[start=8]
. Создайте и настройте ограничение безопасности под названием  ``UserConstraint`` , выполнив следующее:
1. Щелкните Add Security Constraint ("Добавить ограничение безопасности"), чтобы добавить новое ограничение безопасности.
2. Введите  ``UserConstraint``  в качестве Display Name ("Отображаемое имя") нового ограничения безопасности.
3. Нажмите кнопку Add ("Добавить") для добавления Web Resource Collection ("Коллекция веб-ресурсов").
4. В диалоговом окне добавления ресурсов установите Resource Name ("Имя ресурса") на  ``User``  и шаблон URL на  ``/secureUser/*`` , после чего нажмите кнопку "OK".
5. Выберите Enable Authentication Constraint ("Включить ограничение проверки подлинности") и нажмите кнопку Edit ("Изменить"), чтобы изменить поле Role Name ("Имя роли").
6. В диалоговом окне изменения имени роли выберите AdminRole и UserRole на левой панели, нажмите кнопку Add ("Добавить"), затем нажмите кнопку OK.
Примечание. Также можно задать время ожидания для сеанса в web.xml. Для настройки времени ожидания щелкните вкладку General ("Общие") визуального редактора и укажите, сколько должен продолжаться сеанс. Продолжительность по умолчанию – 30 минут. 
 


=== Вход с помощью формы

Использование формы для входа позволяет настраивать содержимое страниц входа и ошибки входа. Этапы настройки входа с помощью формы идентичны настройке простого входа, за исключением того, что надо указать созданные страницы <<loginform,входа и ошибки>>.

Настройка формы входа показана ниже:

1. В окне 'Проекты' дважды щелкните  ``web.xml`` , расположенный в каталоге  ``Веб-страницы/WEB-INF`` , чтобы открыть файл в Visual Editor.
2. Щелкните Security ("Безопасность") на панели инструментов, чтобы открыть файл на панели безопасности и развернуть узел Login Configuration ("Настройка входа").
3. Установите настройку входа на Form ("Форма").
4. Установите Form Login Page ("Страница входа с помощью формы"), щелкнув Browse ("Просмотр") и найдя  ``login.jsp`` .
5. 
Установите Form Login Page ("Страница ошибки входа с помощью формы"), щелкнув Browse ("Просмотр") и найдя  ``loginError.html`` .

image::images/login-forms.png[]

[start=6]
. Введите имя области, в зависимости от используемого сервера.
* *GlassFish:* введите  ``file``  в поле Realm Name ("Имя области"). Это имя области по умолчанию при создании пользователей на сервере GlassFish.
* *Tomcat:* не вводите имя области.
* *WebLogic:* введите имя своей области. Областью по умолчанию является  ``myrealm`` .

[start=7]
. Разверните узел Security Roles ("Роли безопасности") и нажмите кнопку Add ("Добавить") для добавления имени роли.

[start=8]
. Добавьте следующие роли безопасности:
|===

|Роль сервера |Описание 

|AdminRole |Пользователи, добавленные к этой роли, получат доступ к каталогу  `` secureAdmin``  на сервере. 

|UserRole |Пользователи, добавленные к этой роли, получат доступ к каталогу  ``secureUser``  на сервере. 
|===

[start=9]
. Создайте и настройте ограничение безопасности под названием  ``AdminConstraint`` , выполнив следующее:
1. Щелкните Add Security Constraint ("Добавить ограничение безопасности"), чтобы добавить новое ограничение безопасности.
2. Введите  ``AdminConstraint``  в качестве Display Name ("Отображаемое имя") нового ограничения безопасности.
3. Нажмите кнопку Add ("Добавить") для добавления Web Resource Collection ("Коллекция веб-ресурсов").
4. 
В этом диалоговом окне установите Resource Name ("Имя ресурса") на  ``Admin``  и шаблон URL на  ``/secureAdmin/*`` , после чего нажмите кнопку "OK".

*Примечание. * При использовании звездочки (*), пользователю предоставляется доступ ко всем файлам в этой папке.

image::images/addwebresource.png[]

[start=5]
. Выберите Enable Authentication Constraint ("Включить ограничение проверки подлинности") и нажмите кнопку Edit ("Изменить"). Откроется диалоговое окно изменения имен роли.

[start=6]
. В этом окне выберите AdminRole на левой панели, нажмите кнопку Add ("Добавить"), затем нажмите кнопку OK.

После завершения этих действий результат должен быть подобен этому рисунку:

image::images/constraints.png[]

[start=10]
. Создайте и настройте ограничение безопасности под названием  ``UserConstraint`` , выполнив следующее:
1. Щелкните Add Security Constraint ("Добавить ограничение безопасности"), чтобы добавить новое ограничение безопасности.
2. Введите  ``UserConstraint``  в качестве Display Name ("Отображаемое имя") нового ограничения безопасности.
3. Нажмите кнопку Add ("Добавить") для добавления Web Resource Collection ("Коллекция веб-ресурсов").
4. В диалоговом окне добавления ресурсов установите Resource Name ("Имя ресурса") на  ``User``  и шаблон URL на  ``/secureUser/*`` , после чего нажмите кнопку "OK".
5. Выберите Enable Authentication Constraint ("Включить ограничение проверки подлинности") и нажмите кнопку Edit ("Изменить"), чтобы изменить поле Role Name ("Имя роли").
6. В диалоговом окне изменения имени роли выберите AdminRole и UserRole на левой панели, нажмите кнопку Add ("Добавить"), затем нажмите кнопку OK.
Примечание. Также можно задать время ожидания для сеанса в web.xml. Для настройки времени ожидания щелкните вкладку General ("Общие") визуального редактора и укажите, сколько должен продолжаться сеанс. Продолжительность по умолчанию – 30 минут.


== Настройка дескрипторов развертывания сервера

В случае развертывания приложения на сервере GlassFish или WebLogic, необходимо настроить дескриптор развертывания сервера, чтобы он соответствовал ролям безопасности, определенным в  ``web.xml`` . Дескриптор развертывания сервера указан в узле Configuration Files ("Файлы конфигурации") созданного проекта в окне Projects ("Проекты").


=== Настройка дескриптора развертывания сервера GlassFish

Дескриптор развертывания сервера GlassFish именуется  ``glassfish-web.xml`` . Дескриптор развертывания сервера в папке Configuration Files ("Файлы конфигурации"). Если отсутствует, создайте его, щелкнув правой кнопкой мыши узел проекта и перейдя в 'Создать' > 'Другие' > GlassFish > 'Дескриптор развертывания GlassFish'. Примите все параметры по умолчанию.

Обратите внимание, что значения, введенные в  ``web.xml`` , отображаются в  ``glassfish-web.xml`` . Среда IDE извлекает эти значения из  ``web.xml``  для нас.

*Для настройки дескриптора развертывания GlassFish:*

1. В окне 'Проекты' разверните узел 'Файлы конфигурации' и дважды щелкните  ``glassfish-web.xml`` . Дескриптор развертывания  ``glassfish-web.xml``  открывается в специальном редакторе со вкладками для дескрипторов развертывания GlassFish.

*Примечание.* Для сервера GlassFish с более поздними версиями, чем 3.1, для этого файла задается имя  ``sun-web.xml`` .


[start=2]
. Выберите вкладку Security ("Безопасность") для раскрытия ролей безопасности.

[start=3]
. Выберите узел роли безопасности AdminRole, чтобы открыть страницу Security Role Mapping ("Сопоставление ролей безопасности").

[start=4]
. 
Щелкните Add Principal ("Добавить участника") и введите  ``admin``  в качестве имени участника. Нажмите кнопку "ОК".

image::images/add-principal.png[]

[start=5]
. Выберите узел роли безопасности UserRole, чтобы открыть страницу Security Role Mapping ("Сопоставление ролей безопасности").

[start=6]
. Щелкните Add Principal ("Добавить участника") и введите  ``user``  в качестве имени участника. Нажмите кнопку "OK".

[start=7]
. Сохраните изменения в  ``glassfish-web.xml`` .

 ``glassfish-web.xml``  также можно просматривать и редактировать в редакторе XML, щелкнув вкладку XML. Если открыть  ``glassfish-web.xml``  в редакторе XML, то можно будет увидеть, что  ``glassfish-web.xml``  содержит следующую информацию о сопоставлении ролей безопасности:

[xml-tag]#<security-role-mapping>
    <role-name>#

[source,xml]
----

AdminRole[xml-tag]#</role-name>
    <principal-name>#admin[xml-tag]#</principal-name>
</security-role-mapping>
<security-role-mapping>
    <role-name>#UserRole[xml-tag]#</role-name>
    <principal-name>#user[xml-tag]#</principal-name>
</security-role-mapping>#
----


=== Настройка дескриптора развертывания сервера WebLogic

Дескриптор развертывания WebLogic именуется  ``weblogic.xml`` . На данный момент <<gf-dd,поддержка дескрипторов развертывания GlassFish>> в среде IDE не распространяется на дескрипторы развертывания WebLogic. Поэтому все изменения в  ``weblogic.xml``  необходимо будет внести вручную.

Дескриптор развертывания сервера WebLogic в папке Configuration Files ("Файлы конфигурации"). Если отсутствует, создайте его, щелкнув правой кнопкой мыши узел проекта и перейдя в 'Создать' > 'Другие' > WebLogic > 'Дескриптор развертывания WebLogic'. Примите все параметры по умолчанию.

*Примечание.* Дополнительную информацию об обеспечении безопасности веб-приложений в WebLogic, включая декларативную и программную безопасность, можно найти в link:http://download.oracle.com/docs/cd/E21764_01/web.1111/e13711/thin_client.htm[+Oracle Fusion Middleware Programming Security for Oracle WebLogic Server ("Программная безопасность Oracle Fusion Middleware для Oracle WebLogic Server")+].

Для настройки дескриптора развертывания WebLogic:

1. В окне 'Проекты' разверните узел 'Файлы конфигурации' и дважды щелкните  ``weblogic.xml`` . Дескриптор развертывания  ``weblogic.xml``  откроется в редакторе.
2. Внутри элемента  ``<weblogic-web-app>``  введите или скопируйте следующие элементы назначения роли безопасности:[xml-tag]#<security-role-assignment>
    <role-name>#

[source,xml]
----

AdminRole[xml-tag]#</role-name>
    <principal-name>#adminGroup[xml-tag]#</principal-name>
</security-role-assignment>
<security-role-assignment>
    <role-name>#UserRole[xml-tag]#</role-name>
    <principal-name>#userGroup[xml-tag]#</principal-name>
</security-role-assignment>#
----

[start=3]
. Сохраните изменения в  ``weblogic.xml`` .


== Развертывание и выполнение приложения

В окне "Проекты" щелкните правой кнопкой мыши узел проекта и выберите команду "Выполнить".

*Примечание.* По умолчанию, проект создается с включенной функцией 'Компилировать при сохранении', так что не нужно сначала компилировать код. Дополнительные сведения о функции "Компилировать при сохранении" см. в разделе link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG510[+Сборка проектов Java+] в _Руководстве по разработке приложений в IDE NetBeans_.

После сборки приложения и развертывания его на сервере в веб-браузере откроется начальная страница. Выберите безопасную область, к которой необходимо получить доступ, щелкнув *admin* либо *user*.

image::images/deploy1.png[]

После ввода имени пользователя и пароля возможны следующие результаты:

* Пароль пользователя верен и у пользователя есть права на доступ к защищенному содержимому -> отобразится страница защищенного содержимого.

image::images/deploy2.png[]

* 
Пароль пользователя неверен -> отобразится страница ошибки.

image::images/deploy3.png[]

* 
Пароль пользователя верен, но у пользователя нет прав на доступ к защищенному содержимому -> браузер выведет ошибку 403, "В доступе к запрошенному ресурсу отказано".

image::images/deploy4.png[]


== Заключение

В этом учебном курсе мы создали веб-приложение. Затем мы изменили настройки его безопасности, используя редакторы дескрипторов web.xml и glassfish-web.xml, создав веб-страницы с безопасным входом и несколькими удостоверениями.



== Дополнительные сведения

* link:quickstart-webapps.html[+Введение в разработку веб-приложений+]
* link:../../trails/java-ee.html[+Учебная карта по Java EE и Java Web+]


|===
|
link:/about/contact_form.html?to=3&subject=Feedback: Securing a Web Application[+Отправить отзыв по этому учебному курсу+]

 
|===
