2016-03-17 4 views
0

Я хотел бы, чтобы из одного веб-приложения могли быть частично открыты (или, более конкретно, не использовать аутентификацию на основе контейнера).web.xml и смешение no-auth и auth

Элементы приложения, использующие аутентификацию на основе контейнеров, проживают по адресу /, а часть, открытая для жизни, находится по адресу /openpages. (Да, я знаю, что это, вероятно, было проще, если бы это было наоборот, но не хочу, чтобы открыть исходный код приложения)

Это моя попытка на web.xml:

<web-app> 
    .... 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>closedpages</web-resource-name> 
      <url-pattern>/</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>*</role-name> 
     </auth-constraint> 
    </security-constraint> 
    <login-config> 
     <auth-method>BASIC</auth-method> 
    </login-config> 
</web-app> 

Поскольку мой URL-шаблон состояний / и не /* Я думаю, он должен работать. Но это не так. Независимо от того, получаю ли я доступ к http://myhost/ или http://myhost/openpages/ Я получаю запрос HTTP Authentication. Только http://myhost/ должен инициировать запрос HTTP-аутентификации.

Способ, которым я понимаю, что все, что конкретно не покрыто <security-constraint>, открыто, не так ли? Таким образом, /openpages/ не должен использовать аутентификацию.

Подробнее: Мне не очень нравится то, что <login-config> указан на уровне webapp, а не на уровне каждого ограничения безопасности. Наверняка это вредит гибкости?

+0

Не могли бы вы попробовать [whitelisting] (http://stackoverflow.com/a/8071539/3080094) и использовать [пустую строку] (http://stackoverflow.com/a/36026195/3080094) для контекстного корня? – vanOekel

+0

@vanOekel. Это решило это для меня. Особенно тот факт, что «белый список» был вариантом. Почему бы вам не сказать это как ответ, и я приму это. – peterh

ответ

1

Все конкретно не охвачены security-constraint не является открытым по умолчанию, используйте whitelisting для этого (короче: а security-constraint без auth-constraint доступен всем без авторизации).

Также отметим, что url-pattern значения не являются полностью интуитивно, увидеть детали в this answer и пример множественного сопоставления URL-шаблон задачи в this question (где /testresource.xml матчи как /* и *.xml).