有没有办法在没有弹簧安全的情况下使用弹簧过滤器链?

Posted

技术标签:

【中文标题】有没有办法在没有弹簧安全的情况下使用弹簧过滤器链?【英文标题】: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 代码会很有趣。 :) 谢谢,史蒂夫。我确信弹簧过滤器=弹簧安全过滤器。不过好像不是真的。 【参考方案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

【讨论】:

以上是关于有没有办法在没有弹簧安全的情况下使用弹簧过滤器链?的主要内容,如果未能解决你的问题,请参考以下文章

弹簧安全过滤器没有启动

弹簧安全 CORS 过滤器

弹簧安全CORS过滤器

弹簧安全CORS过滤器

弹簧安全CORS过滤器

弹簧安全CORS过滤器