Glassfish 3.1 принципал по умолчанию для сопоставления ролей - PullRequest
17 голосов
/ 18 июля 2011

Я работаю с модулем glassfish и jaas.

Я настроил свой web.xml таким образом.

<security-constraint>
    <web-resource-collection>
        <web-resource-name>ALL Page for admin</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>file</realm-name>
</login-config>
<security-role>
    <description>Administrator</description>
    <role-name>user</role-name>
</security-role>

Это означает, что все пользователи, которые хотят получить доступ к моему веб-приложению,пользователя группы.

Затем на консоли Glassfish мне нужно отметить следующие параметры: Конфигурация -> Конфигурация сервера -> Безопасность -> Стандартное сопоставление ролей по умолчанию

Мой вопрос, почемуМне нужно отметить этот принципал по умолчанию для сопоставления ролей?И как я могу изменить свой web.xml, чтобы не ставить галочку?

Большое спасибо

Loic

1 Ответ

38 голосов
/ 18 июля 2011

Когда вы задаете роли и роли в 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 .

...