Переопределить роль безопасности application-bnd с помощью configDropins

У меня есть докер-образ приложения на основе Websphere Liberty. По умолчанию в этом образе используется обычная проверка подлинности с базовым реестром, в котором есть несколько примеров пользователей. Затем группа basicRegistry привязывается к роли безопасности следующим образом (и на эту роль безопасности ссылаются из файла web.xml приложения):

<webApplication id="myWebapp" ...>
    <application-bnd>
        <security-role name="Users">
            <group name="Users"/>
        </security-role>
    </application-bnd>
</webApplication>

Теперь в моей среде аутентификация будет обрабатываться вне этого контейнера, поэтому я хочу отключить базовую проверку аутентификации и сделать ее открытой для всех, кто может получить к ней доступ. Вместо того, чтобы переупаковывать весь server.xml, я надеялся просто добавить некоторую конфигурацию в configDropins / override, чтобы отключить аутентификацию для веб-приложения.

Попробовав это, я довольно смущен тем, должно ли это работать / как это должно работать ... Вот наблюдаемое поведение:

Если я сначала запускаю сервер, то добавляю фрагмент конфигурации в configDropins / override, например:

<webApplication id="myWebapp">
    <application-bnd>
        <security-role name="Users">
            <special-subject type="EVERYONE"/>
        </security-role>
    </application-bnd>
</webApplication>

Затем веб-приложение перезагрузится, и базовая аутентификация будет отключена (хорошо).

Однако, когда я упаковываю этот же фрагмент конфигурации в configDropins / override и затем запускаю сервер, веб-приложение запускается с включенной базовой аутентификацией, и все запросы завершаются с ошибкой со статусом HTTP 401.

Может ли кто-нибудь помочь мне понять это поведение и / или предложить альтернативный подход?


person lmsurprenant    schedule 17.12.2018    source источник


Ответы (1)


Добавление атрибута id к элементу security-role должно решить эту проблему. В вашем примере, по сути, есть два элемента роли безопасности после обработки конфигурации. Среда выполнения безопасности объединит их вместе на основе имени, но поведение будет варьироваться в зависимости от порядка, в котором получены два элемента роли безопасности.

person Brent Daniel    schedule 22.12.2018
comment
Спасибо за этот ответ. К сожалению, даже после добавления атрибута id к элементу security-role как в server.xml, так и в override.xml, я вижу ошибку 401 с ответом об ошибке, например: [ERROR ] CWIML4537E: The login operation could not be completed. The specified principal name **** is not found in the back-end repository. ... - person lmsurprenant; 03.01.2019
comment
Есть ли где-нибудь описание алгоритма, используемого для переопределения? Нужно ли мне обернуть элемент роли безопасности в override.xml в веб-приложении, как в моем примере? В свой server.xml я включаю другие атрибуты и элементы для этого веб-приложения, но я предполагал, что они каким-то образом будут объединены в одно определение веб-приложения, поскольку они имеют одинаковый идентификатор. - person lmsurprenant; 03.01.2019
comment
Хммм, может быть, он работает после добавления атрибута id, как описано. Я думал, что все еще вижу ошибку, но после некоторой дополнительной настройки конфигурации, похоже, теперь это работает. Может, я не начал с чистого листа после первой попытки ?! В любом случае, примет это как ответ, если эта ошибка не вернется. Спасибо еще раз! - person lmsurprenant; 03.01.2019
comment
Правила можно найти по адресу ibm.com/support/knowledgecenter/en/SSAW57_liberty/ В вашем случае два элемента веб-приложения объединяются вместе, потому что у них одинаковый идентификатор. Элементы application-bnd сливаются вместе, потому что может быть только один. Элементы роли безопасности не объединяются (что касается среды выполнения конфигурации), потому что может быть несколько элементов, и они не имеют значений идентификаторов. Это странный случай, потому что среда выполнения безопасности объединяет их по имени. - person Brent Daniel; 03.01.2019
comment
Я снова получил 401 :-( Возможно ли, что это все еще не определитель? Возможно, <application-bnd> не объединяется? Я добавил атрибут id к этому <application-bnd> элементу, и он снова работает. Сообщу, если я снова увижу 401. - person lmsurprenant; 04.01.2019