Я работаю над приложением, использующим безопасность Spring.
Приложение является расширяемым, и я хотел бы запретить расширениям программно изменять фильтры в карте цепочки фильтров Spring FilterChainProxy. Я намерен сделать следующее:
Реализуйте
CustomFilterChainProxy, реализующий все реализованные интерфейсыFilterChainProxy(Filter, InitializingBean, ApplicationContextAware). В нем я буду держать частный членFilterChainProxyи делегировать ему все вызовы интерфейса.Используйте Spring
DelegatingFilterProxy, объявив в файлеweb.xml:<filter> <filter-name>customSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter>В файлах конфигурации Spring вместо прямого использования Spring
FilterChainProxyмой компонент будет иметь классCustomFilterChainProxyследующим образом:<bean id="customSecurityFilterChain" class="....CustomFilterChainProxy"> <security:filter-chain-map ...> <security:filter-chain pattern="..." filters="..." /> <security:filter-chain pattern="..." filters="..." /> ... </security:filter-chain-map> </bean>Чтобы иметь возможность установить карту цепочки фильтров во время загрузки компонента Spring, я должен предоставить установщик в своем классе
CustomFilterChainProxy. Что я и сделаю. И чтобы предотвратить установку карты цепочки фильтров после загрузки компонента Spring, я позабочусь о том, чтобы после создания компонента (в методе@PostConstruct) из этого установщика было выдано исключение.
Имея CustomFilterChainProxy вместо FilterChainProxy, я вызываю сбой в работе любого процесса Spring?
Я видел единственный класс Spring, ссылающийся на сам объект FilterChainProxy, это FilterChainProxyPostProcessor, но не мог понять, должно ли это повлиять на мой выбор реализации. Любой ввод?
Большое спасибо.