Подтвердить что ты не робот

Директива по умолчанию по умолчанию для Glassfish 3.1.

Я работаю с модулем из стекла и ява.

Я настроил свой 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>

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

Затем на консоли из стеклянной рыбы мне нужно отметить следующие опции: Конфигурация → server-config → security → Default Principal для сопоставления ролей

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

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

Лоик

4b9b3361

Ответ 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.