2013-05-13 4 views
2

У меня есть файл WAR, который определяет фильтр для запуска на всех URL-адресов:WebSphere 7.0 не будет работать фильтр для корневого URL

<!DOCTYPE web-app PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
... 
<filter> 
    <filter-name>OurRedirectServletFilter</filter-name> 
    <filter-class>com.mycompany.RedirectServletFilter</filter-class> 
</filter> 
... 
<filter-mapping> 
    <filter-name>OurRedirectServletFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Фильтр предназначен для выполнения некоторых переадресовывает от «удобных» URL в соответствующий «фактический» URL-адрес, но я не думаю, что это действительно актуально для проблемы.

В WebSphere 7.0 этот фильтр не запускается для запросов к корневому URL-адресу, например. /ctxroot или /ctxroot/; вместо этого я просто получаю ответ 404. Это делает пробег для /ctxroot/blah, является ли blah действительным или недействительным путем.

Я попытался добавить дополнительные сопоставления фильтров для шаблонов URL-адресов <url-pattern>/</url-pattern> и <url-pattern></url-pattern>, но я получаю такое же поведение.

Я тестировал на базе WAS 7.0.0.0 и применял последний пакет исправлений, то есть WAS 7.0.0.27.

Фильтр работает так, как ожидается, на WAS 8.5, и я уверен, что на WAS 8.0, а также на каждой версии WebLogic, JBoss и Tomcat, которые я пробовал. Это, кажется, ошибка с WAS 7.0, но я все равно хотел бы найти обходной путь. Кто-нибудь знает об одном?

ответ

2

Я в конце концов посмотрел на тело ошибки ошибки 404 и увидел код ошибки SRVE0190E, который привел меня к this helpful page. Проблема в том, что фильтры по умолчанию не вызываются для URL-адресов, которые соответствуют ресурсам, которые не существуют (хотя я клянусь, что я протестировал это для URL-адреса, отличного от корня контекста, и мой фильтр был вызван).

Можно настроить WebSphere для вызова фильтров в этой ситуации, устанавливая пользовательское свойство, как дополнительно описано в связанной странице:

com.ibm.ws.webcontainer.invokefilterscompatibility=true 

Я также обнаружил, что в случае контекста корневого URL, установив welcome-file в web.xml, который сопоставляется с существующим ресурсом, вызывает вызванный фильтр:

<welcome-file-list> 
    <welcome-file>fakehome.html</welcome-file> 
</welcome-file-list> 
Смежные вопросы