我正在使用Spring安全性的应用程序。
该应用程序是可扩展的,我想阻止扩展程序更改Spring的FilterChainProxy
的过滤器链图中的过滤器。我打算做的是以下几点:试图为Spring的FilterChainProxy提供另一种实现方式
实现一个
CustomFilterChainProxy
实现所有的FilterChainProxy
的实现的接口(过滤器,的InitializingBean,了ApplicationContextAware)。其中我将持有私人FilterChainProxy
成员并将所有接口调用委托给它。使用Spring通过宣布在
web.xml
文件的DelegatingFilterProxy
:<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 bean的加载过程中过滤器链地图,我必须在我的0供应二传手类。我会做。为了防止在Spring bean加载后设置过滤器链映射,我将确保在bean构建之后(在
@PostConstruct
方法中)将从该设置器抛出异常。
由于具有CustomFilterChainProxy
,而不是一个FilterChainProxy
,我是不是造成任何春天过程发生故障?
我看到引用FilterChainProxy
对象本身的唯一Spring类是FilterChainProxyPostProcessor
,但无法确定这是否会影响我的实现选择。任何输入?
非常感谢。
+1。试图通过这种类型的代码隐藏来防止用法不会阻止真正的m但是它会让所有使用你的框架的人感到沮丧,因为你故意绕过(已建立的)API。 – pap
@ user1095833我想你的帖子中使用Spring Security的方式并不十分清楚。你是在代码中建立一切还是使用ApplicationContext?通常访问FilterChainProxy的唯一方法是通过显式从ApplicationContext获取bean。或者你有一个使用涉及到使用FilterChainProxy的引用的扩展? –
是的,我唯一担心的是阻止调用setFilterChainMap - 这是因为我们发现扩展代码直接访问bean并使用此setter。更新了问题以显示Spring的配置文件。它配置一个CustomFilterChainProxy而不是FilterChainProxy,所以引用该bean将返回一个CustomFilterChainProxy。 – Jim