首页 文章

从BeanDefinitionParser注册Spring过滤器

提问于
浏览
0

我正在创建一个自定义命名空间,用于Spring XML配置 . 我已经实现了 NamespaceHandlerBeanDefinitionParser . 所以,现在我可以将 <myns:some-awesome-feature /> 放入我的Spring配置中,它会自动创建所需的bean .

除了创建一些普通的Spring bean之外,我还想让这个注释寄存器 OncePerRequestFilter 从我的代码请求中提取一些信息以便能够利用 . 有没有办法在实现自定义XML标记时使用我可用的两个类以编程方式注册过滤器?

1 回答

  • 1

    不分别触摸 web.xmlWebApplicationInitializer是不可能的 . 但是您可以创建一个可扩展的解决方案,允许将来进行修改而不会有麻烦 .

    Spring Security的 <http pattern='...' security="..."/> 会自动为您创建并注册一系列链式过滤器bean . 您所要做的就是在 web.xml 中注册DelegatingFilterProxy并参考 springSecurityFilterChain .

    你可以创建一个类似的解决方案来定义例如 <myns:awesome-http pattern='...' /> 实例化 OncePerRequestFilter . 在 web.xml 中,您声明 DelegatingFilterProxy 引用您的 awesomeFilterChain . 在将来的版本中,您可以在不触及配置的情况下为链添加更多过滤器 .

    我从未实现过这样的功能,但我非常有信心这是可能的 .

    作为一个起点,请看一下HttpConfigurationBuilderHttpSecurityBeanDefinitionParser的来源,看看Spring Security如何实现 <http .../> .

相关问题