在Spring Security中同时具有Servlet过滤器和AuthenticationProvider的意义是什么?

问题描述 投票:0回答:2

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

java authentication spring-security authorization servlet-filters
2个回答
0
投票

这是一种简洁的代码设计。 AuthenticationProvider及其相关对象是更通用的模型,它不依赖于与Servlet之类的基础架构相关的事物。

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

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


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.