2016-04-20 3 views
0

Я попытался иметь несколько царств безопасности в моем приложении, но я получаю исключение во время развертывания:Многопользовательских области безопасности

сообщения: Множественные элементы Логина-конфигурации обнаружены

фрагмента web.xml:

.... 
<security-constraint> 
    <display-name>Admin Constraint</display-name> 
    <web-resource-collection> 
     <web-resource-name>Admin Pages</web-resource-name> 
     <description/> 
     <url-pattern>/admin/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <description/> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>ApplicationRealm</realm-name> 
</login-config> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>mb-domain</realm-name> 
</login-config> 
<security-role> 
    <description/> 
    <role-name>admin</role-name> 
</security-role> 
<security-role> 
    <description/> 
    <role-name>user</role-name> 
</security-role> 
... 

Что я делаю неправильно?

+2

Кроме того, что это нарушение спецификации, ваш прецедент не ясен. Зачем вам понадобится несколько конфигураций входа? Как контейнер узнает, какую login-config использовать для ограниченных URL-адресов в приложении? – CoolBeans

+2

@CoolBeans «Зачем вам понадобится несколько конфигураций для входа?» - Многие варианты использования -> Разрешить пользователю выбирать способ входа в систему (просто выйти из этого самого веб-сайта и посмотреть параметры входа в систему, которые он представляет) или использовать разные механизмы аутентификации для разных сегментов приложения. И есть даже вариант использования автоматического резервного копирования (сначала попробуйте маркер, если он ошибочно откажется от имени пользователя/пароля) –

+1

@guest «Я пытался иметь несколько областей безопасности» - то, что вы показали, - это механизмы аутентификации * не realms , Царство как термин явно определено в Java EE, оно также может означать «хранилище идентичности». –

ответ

4

Только один <login-config> может использоваться для дескриптора развертывания веб-модуля.

Согласно §14.2 из Servlet Specification v. 3.1:

правила обработки дескриптора развертывания

[...]

  • Элементы суб под web-app может быть в произвольном порядке в этой версии спецификации. Из-за ограничения XML-схемы множественность элементов distributable, session-config, welcome-file-list, jsp-config, login-config и locale-encoding-mapping-list была изменена с «по желанию» на «0 или более». Контейнеры должны сообщать разработчику описательное сообщение об ошибке, когда дескриптор развертывания содержит более одного элемента из session-config, jsp-config и login-config.

Альтернатива:

  • Использование программной аутентификация (на основе либо JASPIC или какой-либо объекты вашей реализации Java EE/Servlet предлагает).
  • Используйте EAR-упаковку (если допустима одна стратегия аутентификации на модуль).
  • Управление доступом, управляемым контейнером.
Смежные вопросы