阅读文档后我有点困惑...似乎您可以使用任一机制进行完整的身份验证,而无需使用其他机制。您可以在 AuthenticationProvider 中访问请求,并且可以在 servlet 过滤器中设置安全上下文。那么为什么两者都要呢?
最佳答案
基本上,如果您选择这样做,您可以在基于 servlet 的 Web 应用程序的过滤器中执行任何(自定义)身份验证和授权。
但是,spring-security 不仅仅适用于基于 servlet 的 Web 应用程序。
AuthenticationProvider
实现可用于通过基于 servlet 的 Web 应用程序的许多不同过滤器进行身份验证,但也可以通过例如基于套接字的网络应用程序,甚至 native 非 Web 应用程序,并且通常完全不知道您的应用程序所依赖的通信协议(protocol)。
通过实现您的自定义 AuthenticationProvider
接口(interface),您将遵循关注点分离原则,并且稍后您将能够在必要时从不同的过滤器或从其他代码部分委托(delegate)给它,而无需重复您的代码。
关于java - 在 Spring Security 中同时拥有 Servlet Filter 和 AuthenticationProvider 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60357385/