Область безопасности, иногда называемая доменом политики безопасности или доменом безопасности, является областью, в которой сервер приложений определяет и применяет общую политику безопасности. Область содержит список пользователей, которым может быть назначена (или не может быть назначена) группа. Сервер GlassFish поставляется с предустановленными областями безопасности file, certificate, and administration. Администратор также может настроить LDAP, JDBC, дайджест или кастомные области безопасности.
Приложение может указать в своём дескрипторе развёртывания, какую область безопасности использовать. Если приложение не указывает область, сервер GlassFish использует свою область по умолчанию — область file
. Если приложение указывает, что область JDBC должна использоваться для аутентификации пользователя, GlassFish Server будет получать учётные данные пользователя из базы данных. Сервер приложений использует информацию базы данных и включённую опцию области JDBC в файле конфигурации.
База данных предоставляет простой способ добавлять, редактировать или удалять пользователей во время выполнения и позволяет пользователям создавать свои собственные учётные записи без какой-либо административной помощи. Использование базы данных имеет дополнительное преимущество: предоставление места для безопасного хранения любой дополнительной пользовательской информации. Область может рассматриваться как база данных имён пользователей и паролей, которые идентифицируют действительных пользователей веб-приложения или набора веб-приложений с перечислением списка ролей, связанных с каждым пользователем. Доступ к определённым ресурсам веб-приложения предоставляется всем пользователям с определённой ролью вместо перечисления списка связанных пользователей. Имя пользователя может иметь любое количество ролей, связанных с ним.
Сервер GlassFish позволяет администраторам указывать учётные данные пользователя (имя пользователя и пароль) в области JDBC, а не в пуле соединений. Это не позволяет другим приложениям просматривать таблицы базы данных для учётных данных пользователя. По умолчанию хранение паролей в виде открытого текста не поддерживается в области JDBC. В обычных условиях пароли не должны храниться в виде открытого текста.
-
Создайте таблицы базы данных, в которых будут храниться учётные данные пользователя для области.
-
Добавьте учётные данные пользователя в созданные вами таблицы базы данных.
-
Создайте пул соединений JDBC для базы данных.
Вы можете использовать Консоль администрирования или командную строку для создания пула соединений.
-
Создайте ресурс JDBC для базы данных.
Вы можете использовать Консоль администрирования или командную строку для создания ресурса JDBC.
-
Создайте область безопасности
Этот шаг должен связать ресурс с областью, определить таблицы и столбцы для пользователей и групп, используемых для аутентификации, и определить алгоритм дайджеста, который будет использоваться для хранения паролей в базе данных.
Вы можете использовать Консоль администрирования или командную строку для создания области.
-
Измените дескриптор развёртывания для своего приложения, чтобы указать область JDBC.
-
Для корпоративного приложения в файле EAR измените файл glassfish-application.xml
.
-
Для веб-приложения в файле WAR измените файл web.xml
.
-
Для Enterprise-бина в файле JAR EJB измените файл glassfish-ejb-jar.xml
.
Например, для гипотетического приложения файл web.xml
может указывать область jdbcRealm
следующим образом:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbcRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
</form-login-config>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Secure Pages</web-resource-name>
<description/>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ADMINS</role-name>
</auth-constraint>
</security-constraint>
Имя входа на основе формы указывается для всех веб-страниц в /admin
. Доступ к этим страницам будет разрешён только пользователям с ролью ADMINS
.
-
Назначьте роли безопасности пользователям или группам пользователей в области.
Чтобы назначить роль безопасности группе или пользователю, добавьте элемент сопоставления ролей безопасности в дескриптор развёртывания для конкретного сервера приложений, в данном случае glassfish-web.xml
:
<security-role-mapping>
<role-name>USERS</role-name>
<group-name>USERS</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>ADMINS</role-name>
<group-name>ADMINS</group-name>
</security-role-mapping>
Поскольку пользователи GlassFish Server назначаются в группы в процессе создания пользователя, это более эффективно, чем сопоставление ролей безопасности отдельным пользователям.