tutorial j_spring_security_check example ejemplo spring spring-security

j_spring_security_check - ¿Cuál es el AuthenticationManager predeterminado en Spring-Security? ¿Cómo se autentica?



spring security login (2)

Tengo el siguiente bean definido:

<sec:authentication-manager alias="authenticationManager"> <sec:authentication-provider user-service-ref="userDetailsService" /> </sec:authentication-manager>

Supongo que aquí Spring utiliza alguna implementación predeterminada de AuthenticationManager .

En mi código Java tengo:

@Resource(name = "authenticationManager") private AuthenticationManager authenticationManager; // specific for Spring Security public boolean login(String username, String password) { try { Authentication authenticate = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password)); if (authenticate.isAuthenticated()) { SecurityContextHolder.getContext().setAuthentication(authenticate); return true; } } catch (AuthenticationException e) { } return false; }

Aquí se llama AuthenticationManager.authenticate(...) . Pero me gustaría saber qué implementación de AuthenticationManager Spring usa de forma predeterminada y qué hace su authenticate(...) para autenticarse (es decir, asegúrese de que el nombre de usuario coincida con la contraseña).

¿Podrías explicar esto?


Spring Security solo envía una implementación real de AuthenticationManager :

org.springframework.security.authentication.ProviderManager

Esto usa AuthenticationProvider diferente para las tareas de autenticación

AuthenticationManagerBeanDefinitionParser es responsable de analizar <sec:authentication-manager> sus estados de documentación de Java:

Registra el ProviderManager central utilizado por la configuración del espacio de nombres, y permite la configuración de un alias, lo que permite a los usuarios hacer referencia a él en sus beans y ver claramente de dónde viene el nombre.

Crea el ProviderManager y agrega las ofertas especificadas. Si no se especifica ninguna NullAuthenticationProvider en el xml, entonces agrega un NullAuthenticationProvider . Esto es, al menos, un proveedor que hace notar que no se previenen las excepciones de configuración.


AuthenticationManager es realmente solo un contenedor para los proveedores de autenticación, que les proporciona una interfaz coherente. En la mayoría de los casos, el AuthenticationManager predeterminado es más que suficiente.

Cuando usted llama

.authenticate(new UsernamePasswordAuthenticationToken(username, password))`

está pasando el UsernamePasswordAuthenticationToken al AuthenticationProvider predeterminado, que usará userDetailsService para obtener al usuario en función del nombre de usuario y comparar la contraseña de ese usuario con la del token de autenticación.

En general, AuthenticationManager transfiere algún tipo de AuthenticationToken a cada uno de sus AuthenticationProviders y cada uno lo inspecciona y, si pueden usarlo para autenticarse, regresan con una indicación de "Autenticado", "No autenticado" o "No se pudo autenticar". "(lo que indica que el proveedor no sabía cómo manejar el token, por lo que pasó a procesarlo)

Este es el mecanismo que le permite conectar otros esquemas de autenticación, como la autenticación contra un servidor LDAP o Active Directory, o OpenID, y es uno de los principales puntos de extensión dentro del marco de Spring Security.