安全的响应式 Web API

在 Spring Security 出现之前(在此之前,当它被称为 Acegi 安全),Web 安全模型都是围绕 Servlet 过滤器构建。毕竟,这是有道理的。如果需要拦截绑定基于 Servlet 的 Web 框架的请求,以确保请求者具有适当的权限,那么使用 Servlet 过滤器是一个明智地选择。但是 Spring WebFlux 将一个折衷的方法引入其中。

当用 Spring WebFlux 编写 Web 应用程序时,甚至不能保证有 Servlet。事实上,一个被动的 Web 应用程序更有可能构建在 Netty 或其他非 Servlet 服务器上。这是否意味着不能用基于 Servlet 过滤器的 Spring Security 来保护 Spring WebFlux 应用程序?

在保护 Spring WebFlux 应用程序时,确实不应该使用 Servlet 过滤器。但是 Spring Security 仍然可以胜任这个任务。从 5.0.0 版本开始,Spring Security 可用于保护基于 Servlet 的 Spring MVC 和被动式 Spring WebFlux 应用程序。它使用 Spring 的 WebFilter 来完成这项工作, Spring-specific模拟servlet过滤器不需要依赖servlet API。

然而,更值得注意的是,被动式SpringSecurity的配置模型与第4章中看到的没有太大区别。实际上,SpringSecurity不同于SpringWebFlux,后者与SpringMVC有单独的依赖,无论您打算使用它来保护SpringMVCWeb应用程序还是用SpringWebFlux编写的应用程序,SpringSecurity都与SpringBoot安全启动程序相同。提醒一下,这里是安全启动程序的样子:

也就是说,SpringSecurity的被动式配置模型和非被动式配置模型之间有一些小的区别。值得快速了解一下这两种配置模型之间的比较。