2010-02-24 30 views
38

¿Puede alguien decirme la diferencia entre AuthenticationManager y AuthenticationProvider en Spring Security?spring security AuthenticationManager vs AuthenticationProvider?

Cómo se usan y cómo se llaman. Tengo entendido que un SecurityFilter llamará al AuthenticationManager para autenticar un objeto Authentication? Pero entonces, ¿dónde entra en juego el AuthenticationProvider?

Gracias!

Respuesta

25

Creo que el AuthenticationManager delega la búsqueda de información de usuario persistente en una o más AuthenticationProvider s. Los proveedores de autenticación (DaoAuthenticationProvider, JaasAuthenticationProvider, LdapAuthenticationProvider, OpenIDAuthenticationProvider por ejemplo) se especializan en acceder a repositorios de información de usuario específicos. Se menciona algo más en this part del manual de referencia. Dice:

Es posible que desee registrar beans AutenticaciónProveedor adicionales con el ProviderManager y puede hacerlo utilizando el elemento con el atributo ref, donde el valor del atributo es el nombre del bean proveedor que desea agregar.

En otras palabras, puede especificar múltiples AuthenticationProviders, por ejemplo, uno que busca usuarios en una base de datos LDAP y otro que busca en una base de datos SQL.

+0

Por lo tanto, rara vez necesitaría implementar un AuthenticationManager, sino que simplemente implementaría AuthenticationProviders para obtener los detalles del usuario de donde quiera obtenerlos. –

+0

La mayoría de los AuthenticationProviders que podría necesitar ya han sido escritos por los chicos que escriben Spring Security, y están ahí en la documentación de la API para que pueda configurarlos. Si el que necesita aún no está en el marco, probablemente sea trivial implementar la interfaz AuthenticationProvider para sus propósitos. –

+0

Como dijo Hans, En Sprint Security, la clase ProviderManager es una implementación de AuthenticationManager, que llama al método de autenticación AuthenticationProvider. La firma del método de ese Administrador de proveedores es org.springframework.security.providers.ProviderManager.doAuthentication (Autenticación) – Rajesh

3

Desde la primavera reference

El AuthenticationManager es sólo una interfaz, por lo que la aplicación puede ser cualquier cosa que elegimos

La implementación por defecto en la primavera de Seguridad se llama ProviderManager y en lugar de gestionar la petición de autenticación de sí mismo, delega en una lista de AuthenticationProviders configurados, cada uno de los cuales se consulta por turno para ver si puede realizar la autenticación. Cada proveedor arrojará una excepción o devolverá un objeto de Autenticación completamente poblado.

Además, si comprueba el código fuente de AuthenticationManager, ProviderManager y AuthenticationProvider, puede ver esto con claridad.

ProviderManager implementa la interfaz AuthenticationManager y tiene una lista de AuthenticationProviders. Por lo tanto, si desea tener un mecanismo de autenticación personalizado, deberá implementar un nuevo AuthenticationProvider.

Cuestiones relacionadas