У меня есть файл WAR, который определяет фильтр для всех URL-адресов:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app/ctxroot3.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, но я все же хотел бы найти обходной путь. Кто-нибудь знает об одном?