шаблон URL и шаблоны - PullRequest
4 голосов
/ 04 мая 2010

При настройке ограничений безопасности для ролей веб-модуля в приложении J2EE у меня возникает следующая проблема:

Применение:

Предоставление сервлета с именем CustomersServlet , который получает два параметра в URL:

  • Строка, представляющая операцию (INS, UPD, DLT и DSP).
  • Идентификационный номер для идентификации клиента, с которым будет выполняться операция.

EG .: URL /servlet/cusotmersServlet?UPD,5 используется для обновления данных клиента № 5, а URL /servlet/customersServlet?DLT,8 используется для удаления номера клиента 8.

Проблема:

Если я использую это ограничение безопасности, доступ к сервлету может получить только указанная роль, что нормально:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>...</web-resource-name>
        <url-pattern>/servlet/clientsServlet*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>clientAdmin</role-name>
    </auth-constraint>
</security-constraint>

Но я хочу ограничить возможность добавления клиентов только ролью с именем clientAdmin .

Я пробовал несколько шаблонов URL, но ни один из них не работает так, как я хочу (все они позволяют каждой роли получать доступ к сервлету с любым параметром):

<url-pattern>/servlet/clientsServlet?INS,*</url-pattern>
<url-pattern>/servlet/clientsServlet?INS/*</url-pattern>
...

Как использовать подстановочный знак * в теге url-pattern?

Примечание. Приложение не может быть изменено, поэтому мне нужно решение, которое подразумевает только прикосновение к дескриптору развертывания.

Ответы [ 2 ]

12 голосов
/ 05 мая 2010

Тег <url-pattern> допускает только очень ограниченный набор подстановочных знаков. Это, вероятно, не то, к чему вы привыкли в других ситуациях, где * может использоваться в любой позиции. Вы можете скачать спецификацию сервлета здесь:

http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html

Раздел SRV.11.2 этого документа описывает, как эти шаблоны URL интерпретируются. В частности, * означает , а не означает здесь «ноль или более произвольных символов».

2 голосов
/ 05 мая 2010

Примечание: приложение не может быть изменено, поэтому мне нужно решение, которое подразумевает только прикосновение к дескриптору развертывания.

Не уверен, что это считается изменением приложения - возможно, вы могли бы подумать об этом как о плагине. Вы можете добавить Filter. Для этого потребуется добавить новый JAR-файл в WEB-INF / libs и определить фильтр в web.xml . Filter позволит вам программно ограничить доступ.

...