Когда вы задаете роли и роли в web.xml
, вы используете декларативную безопасность, которая, по существу, опирается на использование JAAS для принудительного применения требований аутентификации и авторизации, указанных декларативно.
Роли, указанные в дескрипторах развертыванияявляются просто представлениями ролей, которые используются в приложении.Эти роли не обязательно должны совпадать с ролями, присутствующими в базе данных идентификации пользователя (или области аутентификации), используемой во время выполнения, и обычно они могут отличаться, поскольку разработка приложения могла осуществляться без какого-либо отношения к реальным пользователям игруппы, присутствующие в базе данных идентификаторов пользователей.
Обычно выполняется сопоставление между декларативными ролями, указанными в web.xml
, и принципалами или группами, присутствующими в базе данных идентификаторов пользователей, с использованием дескрипторов развертывания, специфичных для контейнера.В Glassfish 3,1 это файл glassfish-web.xml
.Каждое такое сопоставление будет сопоставлять декларативную роль в приложении либо с принципалом, либо с группой в области JAAS следующим образом в glassfish-web.xml
(для развертываний файлов WAR) или glassfish-application.xml
(для развертываний файлов EAR),или glassfish-ejb-jar.xml
(для развертываний файлов JAR EJB):
glassfish-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
...
<security-role-mapping>
<role-name>user</role-name>
<principal-name>Root</principal-name> <!-- Map a principal to the role 'user' -->
<group-name>Administrators</group-name> <!-- Map a group to the role 'user' -->
</security-role-mapping>
...
</glassfish-web-app>
glassfish-application.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
<glassfish-application>
...
<security-role-mapping>
<role-name>user</role-name>
<principal-name>Root</principal-name> <!-- Map a principal to the role 'user' -->
<group-name>Administrators</group-name> <!-- Map a group to the role 'user' -->
</security-role-mapping>
...
</glassfish-application>
glassfish-ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
...
<security-role-mapping>
<role-name>user</role-name>
<principal-name>Root</principal-name> <!-- Map a principal to the role 'user' -->
<group-name>Administrators</group-name> <!-- Map a group to the role 'user' -->
</security-role-mapping>
...
</glassfish-ejb-jar>
Приведенные выше дескрипторы сопоставляют роль user
с Принципалом с индивидуальной идентификацией имени Root
и группе пользователей с именем Administrators
в области.Вы можете опустить любое из этих сопоставлений и сохранить только роль для сопоставления принципалу или роль для сопоставления группе.Вы также можете иметь несколько принципалов, сопоставленных с одной и той же ролью, или несколько групп, сопоставленных с одной и той же ролью, или даже несколько участников и групп, сопоставленных с одной и той же ролью.
Важно понимать концепцию принципалов и групп.в областях JAAS - принципал представляет личность субъекта (пользователь, входящий в приложение) в системе, и это может быть индивидуальная личность (один пользователь) или групповая идентичность (группа пользователей).Сопоставляя декларативные роли с действительными принципалами или группами, можно было бы применять правила, указанные в web.xml
, к любой базе данных идентификации пользователя (т. Е. К любой области) и делать это динамически, без каких-либо изменений в базе кода.;в конце концов, такое изменение потребовало бы переназначения декларативных ролей на новый набор принципалов и групп, возможно, в другой сфере.Вы можете найти базовое руководство о том, как безопасность Java EE и JAAS работают вместе, в главе о безопасности в руководстве Java EE 6 .
Glassfish позволяет упростить схему сопоставления, где этонет необходимости выполнять сопоставление для всех декларативных ролей в дескрипторе развертывания для конкретного контейнера (в данном случае glassfish-web.xml), если имена декларативных ролей оказываются похожими на имена участников или групп.Это схема сопоставления ролей принципала по умолчанию.Похоже, что в вашем случае принципалы / группы в вашей области совпадают с декларативными ролями, указанными в web.xml
, и, следовательно, вы бы избегали явного сопоставления ролей принципалам и группам.Проще говоря, если роль user
такая же, как у основной user
или группы пользователей user
в вашей области JAAS (и аналогично для других идентификаторов), то вы можете использовать роль по умолчанию для схемы сопоставления принципала с основной частью Glassfish., без сопоставления этого для каждой роли в вашем файле web.xml
.
Если вы не хотите отмечать опцию развертывания принципала по умолчанию для сопоставления ролям, то вы должны предоставить роль для сопоставления принципала / группы самостоятельно вспецифичные для контейнера дескрипторы развертывания, как это обычно делается для других серверов приложений.
Подробнее об этой теме можно прочитать в одной из публикаций на blogs.oracle.com, где описывается эта функция Glassfish .