【问题标题】:Is there a way to use spring filter chains without spring-security?有没有办法在没有弹簧安全的情况下使用弹簧过滤器链?
【发布时间】:2013-11-23 08:15:40
【问题描述】:

我想在我的 Spring Web 应用程序中添加几个过滤器,但它们不会有任何关于安全性的内容,至少目前是这样。所以。如果没有 spring-security,我所能做的就是在 web.xml 中定义多个过滤器(定义过滤器的旧方法)。为了能够使用 spring 过滤器链,我需要添加 spring-security 作为我的项目的依赖项,这似乎很奇怪。也许我做错了什么,确实有过滤器链可以在没有 spring-security 依赖的情况下使用?

【问题讨论】:

  • 我不会将此作为答案发布,因为我不完全确定。但是,Spring Security 过滤器不是经典的 Servlet 过滤器。我很确定它们是 AOP 切入点,它拦截对方法的请求。尝试按住 ctrl 并单击您的 Spring Security 注释之一以查看您找到的内容。深入研究 Spring 代码会很有趣。 :)
  • 谢谢,史蒂夫。我确信弹簧过滤器=弹簧安全过滤器。不过好像不是真的。

标签: java spring spring-mvc spring-security servlet-filters


【解决方案1】:

您可以使用DelegatingFilterProxy。这个Spring Forum Entry 有一个很好的例子来说明如何使用它。

【讨论】:

  • 起初我使用了 DelegatingFilterProxy 和一个简单的过滤器。正如我从您发布的链接中了解到的那样,这个想法是向过滤器添加参数,从而管理过滤器的作用。同时它解决了问题:允许在一个真正的过滤器中完成多个操作。但它不像过滤器链接那样透明,这就是 spring 安全过滤器中正在发生的事情。
【解决方案2】:

Spring Security 能够使用 Spring Security 中包含的 FilterChainProxy 将多个过滤器捆绑到一个过滤器中。由于代码存在于 Spring Security 中,因此您不能在不添加对 spring-security-web 的依赖的情况下使用它,除非将代码复制粘贴到您自己的项目中(许可证可以接受)。 FilterChainProxy 确实是 DelegatingFilterProxy 委托给的 Spring Bean 定义的过滤器。所以它看起来像这样

DelegatingFilterProxy
  -> delegates to FilterChainProxy
     -> delegates to multiple Filter's defined on the FilterChainProxy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2011-09-19
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多