Ответ 1
Когда вы указываете роли и роли в web.xml
, вы используете декларативную защиту, которая в основном полагается на использование JAAS для обеспечения соблюдения требований аутентификации и авторизации, указанных декларативно.
Роли, указанные в дескрипторах развертывания, представляют собой просто представления о ролях, которые используются в приложении. Эти роли не обязательно должны быть такими же, как те, которые присутствуют в базе данных пользовательского удостоверения (или области аутентификации), используемые во время выполнения, и обычно это может быть разным, поскольку разработка приложения может быть предпринята без какого-либо отношения к фактическим пользователям и групп, присутствующих в базе данных пользователя.
Обычно выполняется сопоставление между декларативными ролями, указанными в web.xml
, и принципалами или группами, присутствующими в базе данных идентификатора пользователя, с использованием дескрипторов развертывания конкретного контейнера. В Glassfish 3,1 это файл glassfish-web.xml
. Каждое такое сопоставление будет отображать декларативную роль в приложении как для принципала, так и для группы в области JAAS следующим образом либо в glassfish-web.xml
(для развертывания файлов WAR), либо glassfish-application.xml
(для развертывания файлов EAR), или glassfish-ejb-jar.xml
(для развертывания файлов JJB JAR):
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.