12.5 保护响应式 web API
自从 Spring Security
(之前广为人知的名称是Acegi Security
)以来,web 安全模型都是围绕 servlet 过滤器构建的。毕竟,这是很明显的逻辑。为了确保请求者拥有适当的权限,拦截基于 servlet 的请求,显而易见的就是选择使用 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 特有的,类似于 servlet 过滤器,但并不需要依赖 servlet API。
更值得一提的是,响应式 Spring Security
的配置模型与您在 第4章
中看到的没有太大区别。事实上,不像 Spring WebFlux
与 Spring MVC
有一个独立的依赖关系, Spring Security
使用和以前一样的 starter,无论您是否打算使用它来保护 Spring MVC
的 web 应用程序或用 Spring WebFlux
的应用程序。再重温一下,starter 的配置是这样的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
也就是说, Spring Security
的响应式和非响应式配置模型没什么大的区别。让我们来快速比较查看一下两种配置的模型。