Отображение URL фильтра сервлетов - PullRequest
7 голосов
/ 10 сентября 2010

Как можно сопоставить фильтр с корнем URL? Я использую Tomcat 7.0.2 и развертываю приложение как ROOT.war. Страница приветствия - sign_in.xhtml. Я хотел бы запускать фильтр всякий раз, когда клиент отправляет запрос на корень сайта (то есть только имя домена), или когда клиент запрашивает sign_in.xhtml. Вот что у меня есть:

  <filter>
        <filter-name>My filter</filter-name>
        <filter-class>com.myApp.myFilter</filter-class>        
    </filter>
    <filter-mapping>
        <filter-name>My filter</filter-name>
        <url-pattern>/sign_in.xhtml</url-pattern>
    </filter-mapping>

Запросы для sign_in.xhtml напрямую, успешно вызывают фильтр, но я не уверен, как получить запросы для корня, чтобы вызвать фильтр. Согласно спецификации Servlet (версия 3.0)

<url-pattern>/</url-pattern>

отображается на сервлет по умолчанию, а пустая строка отображается на корень. Вот соответствующий раздел из спецификации:

"Пустая строка (" ") - это специальный шаблон URL, который точно соответствует корень контекста приложения, т. е. запросы вида http://host:port//.. В этом случае информация о пути равна '/', а путь сервлета и путь контекста пустая строка (««). "

Однако оба из следующих шаблонов URL заставляют Tomcat выдавать исключение.

<url-pattern></url-pattern>
<url-pattern>""</url-pattern>

Я был бы очень признателен, если бы кто-то мог пролить свет на это. Спасибо.

Andrew

1 Ответ

7 голосов
/ 10 сентября 2010

<url-pattern>/</url-pattern> должен работать для запросов в корне. Вы пробовали это?

Если вы хотите больше фильтровать все запросов, то вам следует использовать <url-pattern>/*</url-pattern>.


Обновление : чтобы исключить одно и другое, я протестировал url-pattern из / на Tomcat 7 (используя web.xml и @WebFilter(urlPatterns={"/"})), и он действительно не работал должным образом , Тем не менее, url-pattern из / работает должным образом на Tomcat 6 (Servlet 2.5), а также на Glassfish v3 (Servlet 3.0). Я подозреваю ошибку в Tomcat 7, поэтому я сообщил об этом выпуск 49914 .

...