繁体   English   中英

在 Spring Security 中同时拥有 Servlet Filters 和 AuthenticationProviders 有什么意义?

[英]What is the point of having both Servlet Filters and AuthenticationProviders in Spring Security?

阅读文档后我有些困惑……似乎您可以使用任何一种机制进行完整的身份验证,而无需使用另一种机制。 您可以访问 AuthenticationProvider 中的请求,并且可以在 servlet 过滤器中设置安全上下文。 那为什么两者都有呢?

基本上,如果您选择这样做,您可以在基于 servlet 的 Web 应用程序的过滤器中执行任何(自定义)身份验证和授权。

然而,spring-security 不仅仅适用于基于 servlet 的 Web 应用程序。

AuthenticationProvider实现可用于基于 servlet 的 Web 应用程序的许多不同过滤器进行身份验证,也可用于基于套接字的网络应用程序甚至本机非 Web 应用程序进行身份验证,并且通常与您的应用程序所依赖的通信协议完全无关。

通过实现您的自定义AuthenticationProvider接口,您遵循了关注点分离原则,以后您可以在必要时从不同的过滤器或从其他代码部分委托给它,而无需复制您的代码。

这是一种干净的代码设计。 AuthenticationProvider及其相关对象是更通用的模型,它不依赖于基础设施相关的东西,例如Servlet

它类似于描述的领域模型。 通过将基础架构关注点与实际域模型分离,我们可以在其他基础架构环境中重用相同的域模型(即代码),例如在独立桌面应用程序或响应式 Web 应用程序中使用它,而您没有像 Servlet 这样的概念在那里过滤。

您可以认为 Servlet 过滤器是一种将两个世界绑定在一起的基础设施代码。 (Servlet 世界和 Spring 安全域模型世界)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM