2015-03-10 1 views
1

«/», когда приходит к отображению сервлета, означает сервлет по умолчанию. Как вы интерпретируете это, когда приходит к шаблону URL встроенного внутри веб-ресурсы для сбора элементов, как показано ниже:Модель безопасности Java EE Web-коллекция: шаблон разностного URL-адреса «/» и «/ *»

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>fixmyhome</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
     <transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Насчет «/ *" Этот шаблон URL не является отображение сервлета, так как это охваченное тег web-resource-collection.

Я также заметил, что с использованием http://localhost:8081/fixmyhome/main.jsp, используя оба шаблона URL «/» и «/ *» дает те же результаты, что и дает мне страницу main.jsp. Я думал, что «/» может не работает, так как нет подстановочных знаков.

+0

В контексте 'безопасности-constraint', который является регулярным выражением, и не обязательно применяются к отображению. –

+0

На самом деле это не регулярное выражение, нечто похожее на простой шаблон с подстановочными знаками: http://stackoverflow.com/questions/8570805/can-we-use-regular-expressions-in-web-xml-url-patterns – buftlica

+0

Не уверен, но я бы сказал, что согласно [this] (http://docs.oracle.com/javaee/6/tutorial/doc/gmmku.html) он похож на/*. Также см. Общую часть спецификации сервлета для сопоставлений URL-адресов [здесь] (http://stackoverflow.com/a/23705891/1514241). – buftlica

ответ

0

Согласно this Я бы сказал, что, написав/вы r отбрасывая доступ к сервлету, а при записи/* вы ограничиваете доступ к определенному пути. Таким образом, по существу «/» и «/ *» были бы одинаковыми.

0

Шаблон url под ограничением безопасности не относится к какому-либо сопоставлению для сервлета, вместо этого это регулярное выражение. С помощью ограничения безопасности вы можете разрешить/запретить пользователям указанную роль (в ограничении auth) для данного шаблона URL.

+0

Я согласен с тобой, это просто регулярное выражение. Однако если да, то почему «/» и «/ *» дают тот же результат для вышеприведенного примера? – yapkm01

1

<url-pattern> ищет Ant образец. Доступны следующие шаблоны: *, * и **; которые соответствуют 1 символу, 0 или более символов и 0 или более каталогов соответственно.

В вашем случае http://localhost:8081/fixmyhome/main.jsp, оба / и /* работают одинаково, потому что * не является обязательным требованием для того, чтобы они были символом.

Если у вас есть каталог ресурсов в корне, я предположил бы, что ваш <url-pattern> будет выглядеть примерно так: <url-pattern>/resources/**</url-pattern>, что позволяет получить доступ ко всем подкаталогов каталога ресурсов.

Это может помочь обеспечить более некоторую ясность: https://ant.apache.org/manual/dirtasks.html

0

Раздел 12.2 спецификации сервлетов (версия 3) гласит следующее:

  • Строка начинается с символа '/' и заканчивая Для отображения пути используется суффикс '/ *'.
  • Строка, начинающаяся с префикса '*.', Используется как расширение.
  • Пустая строка ("") представляет собой специальный шаблон URL, который точно соответствует корню контекста приложения, то есть запросам формы http://host:port/contextroot/. В этом случае информация о пути - '/' и , путь сервлетов и путь контекста - пустая строка ("").
  • Строка, содержащая только символ «/», указывает «сервлет» по умолчанию приложения. В этом случае путь сервлета
    - это URI запроса, минус путь контекста, и информация о пути имеет значение null.

  • Все остальные строки используются для точных совпадений только