сеть.страница ошибки xml не отфильтрована
Мое приложение работает на Tomcat 7.
Я создал фильтр перезаписи url, который прослушивает все входящие запросы, но при запуске страницы с ошибкой он не фильтрует ее, а фильтрует страницу, на которой произошла ошибка.
Я устанавливаю точку останова в фильтре, и когда возникает ошибка, вы можете увидеть ее триггеры на исходной странице.
Но отображаемая Страница /desktop/index.xhtml
Является ли это ожидаемым поведением ?
Вот мой web.xml
конфигурация:
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<error-page>
<error-code>500</error-code>
<location>/desktop/index.xhtml?messageId=4</location>
</error-page>
1 ответ:
является ли это ожидаемым поведением ?
Да.
ФильтрыПо умолчанию отображаются только на диспетчере
REQUEST
. Ниже<filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Эквивалентно
Это означает, что фильтр срабатывает только на "сырой" входящий запрос, а не на переадресованный запрос или запрос страницы ошибок. Есть еще два диспетчера:<filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
FORWARD
иERROR
. Страницы ошибок внутренне отправляются через диспетчерERROR
. Если вы позволите ... ваш фильтр также зацепится за это, а затем добавьте его:Обратите внимание, что здесь необходимо явно указать диспетчер<filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>
REQUEST
, в противном случае предполагается, что вы полностью его переопределяете и интересуетесь только диспетчеромERROR
.Внутри фильтра вы можете проверить наличие атрибута запроса с ключом
RequestDispatcher#ERROR_REQUEST_URI
был ли он вызван или нет.String errorRequestURI = (String) request.getAttribute(RequestDispatcher.ERROR_REQUEST_URI); if (errorRequestURI != null) { // Error page was triggered on the given URI. }