在阅读了documentation...it之后,我有点困惑,似乎您可以使用任何一种机制进行完整的身份验证,而不使用另一种机制。您可以在AuthenticationProvider中访问请求,并且可以在servlet过滤器中设置安全上下文。那么为什么两者都有呢?
发布于 2020-02-23 17:14:04
基本上,您可以在基于servlet的web应用程序的过滤器中执行任何(自定义)身份验证和授权,如果您选择这样做的话。
然而,spring-不仅仅意味着基于servlet的web应用程序。
AuthenticationProvider实现可以用于基于servlet的web应用程序的许多不同过滤器的身份验证,也可以用于例如基于socket的网络应用程序甚至本地非web应用程序的身份验证,并且通常与您的应用程序所依赖的通信协议完全无关。
通过实现您的自定义AuthenticationProvider接口,您将遵循关注点分离原则,如果需要,您稍后将能够从不同的过滤器或从其他代码部分委托给它,而无需复制您的代码。
发布于 2020-02-23 17:48:45
这是一种干净的代码设计。AuthenticationProvider及其相关对象是更通用的模型,它与Servlet等基础设施无关。
它类似于domain-driven-design中描述的领域模型。通过将关注的基础架构从实际的领域模型中分离出来,我们可以在其他基础架构环境中重用相同的领域模型(即代码),例如在独立的桌面应用程序中使用它,或者在您没有Servlet过滤器等概念的反应式web应用程序中使用它。
您可以认为Servlet筛选器是一种将两个世界绑定在一起的基础结构代码。(Servlet世界和spring安全域模型世界)。
https://stackoverflow.com/questions/60357385
复制相似问题