Поскольку Spring @Component
основан на классе, а не на имени, второй фильтр не загружается, потому что он затеняется первым. Тот факт, что два класса реализации различны, не имеет значения, потому что Spring ищет что-то расширяющее Filter.
Решение состоит в том, чтобы использовать квалификатор для каждого @Component
(например, @Component(value = "MyFilter1")
) и объявить в web.xml
имя фильтра в качестве квалификатора (например, <filter><filter-name>MyFilter</filter-name>...</filter>
.
).
Не забудьте использовать org.springframework.web.filter.DelegatingFilterProxy
и объявить сопоставление фильтров.
Да - это странно, но я сразу отвечаю на свой вопрос. Я начал писать это после нескольких часов поиска, а затем у меня появилась идея. Я проверил это, и оно работает - но у кого-то другого нет причин искать его снова несколько часов.