我正在创建一个自定义命名空间,用于Spring XML配置 . 我已经实现了 NamespaceHandler
和 BeanDefinitionParser
. 所以,现在我可以将 <myns:some-awesome-feature />
放入我的Spring配置中,它会自动创建所需的bean .
除了创建一些普通的Spring bean之外,我还想让这个注释寄存器 OncePerRequestFilter
从我的代码请求中提取一些信息以便能够利用 . 有没有办法在实现自定义XML标记时使用我可用的两个类以编程方式注册过滤器?
1 回答
不分别触摸
web.xml
或WebApplicationInitializer是不可能的 . 但是您可以创建一个可扩展的解决方案,允许将来进行修改而不会有麻烦 .Spring Security的
<http pattern='...' security="..."/>
会自动为您创建并注册一系列链式过滤器bean . 您所要做的就是在web.xml
中注册DelegatingFilterProxy并参考springSecurityFilterChain
.你可以创建一个类似的解决方案来定义例如
<myns:awesome-http pattern='...' />
实例化OncePerRequestFilter
. 在web.xml
中,您声明DelegatingFilterProxy
引用您的awesomeFilterChain
. 在将来的版本中,您可以在不触及配置的情况下为链添加更多过滤器 .我从未实现过这样的功能,但我非常有信心这是可能的 .
作为一个起点,请看一下HttpConfigurationBuilder和HttpSecurityBeanDefinitionParser的来源,看看Spring Security如何实现
<http .../>
.