春季安全AuthenticationManager与AuthenticationProvider?
有人能告诉我在Spring Security中AuthenticationManager
和AuthenticationProvider
的区别吗?
他们如何使用,他们如何被称为。 我的理解是一个SecurityFilter
会调用AuthenticationManager
来authentication一个Authentication
对象? 但是AuthenticationProvider
在哪里起作用呢?
谢谢!
我认为AuthenticationManager
委托获取持久的用户信息给一个或多个AuthenticationProvider
。 身份validation提供程序(例如DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider
)专门用于访问特定的用户信息存储库。 参考手册的这一部分提到了其他的东西。 它说:
您可能想要使用ProviderManager注册更多的AuthenticationProvider bean,您可以使用具有ref属性的元素来执行此操作,其中属性的值是您要添加的提供者bean的名称。
换句话说,您可以指定多个AuthenticationProviders,例如在LDAP数据库中查找用户,在SQL数据库中查找另一个用户。
从春季参考
AuthenticationManager只是一个接口,所以实现可以是我们select的任何东西
Spring Security中的默认实现被称为ProviderManager,而不是自己处理authentication请求,它委托给一个configuration好的AuthenticationProvider列表,每一个都被查询是否可以执行authentication。 每个提供者将会抛出一个exception或返回一个完全填充的authentication对象。
另外,如果您检查AuthenticationManager,ProviderManager和AuthenticationProvider的源代码,您可以清楚地看到这一点。
ProviderManager实现AuthenticationManager接口,并具有AuthenticationProviders列表。 所以如果你想拥有自定义authentication机制,你需要实现新的AuthenticationProvider。
- 结合Spring项目和泽西岛
- Spring事务中requires_new和嵌套传播的区别
- 在Spring中将bean引用注入Quartz作业?
- 获取错误org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“springSecurityFilterChain”的bean
- 如何使用EclipsedebuggingSpring Boot应用程序?
- @PostConstruct方法上的@Transactional
- 使用YAML的Spring @PropertySource
- 用Spring Security进行unit testing
- 如何从连接表创build多个到多个Hibernate映射的附加属性?