2012-03-20 8 views
31

Tengo el siguiente frijol definido:¿Cuál es el AuthenticationManager predeterminado en Spring-Security? ¿Cómo se autentica?

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

supongo que aquí Spring utiliza algunas implementación predeterminada de AuthenticationManager.

En mi código Java que tienen:

@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í AuthenticationManager.authenticate(...) se llama. Pero me gustaría saber qué implementación de AuthenticationManager Spring usa de manera predeterminada, y qué hace su authenticate(...) para autenticarse (es decir, asegúrese de que el nombre de usuario coincida con la contraseña).

¿Podría explicar esto?

Respuesta

39

El AuthenticationManager es realmente solo un contenedor para los proveedores de autenticación, que ofrece una interfaz coherente para todos ellos. En casos más, el valor predeterminado AuthenticationManager es más que suficiente.

Cuando se llama a

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

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

En general, el AuthenticationManager pasa algún tipo de AuthenticationToken a la cada uno de ellos es AuthenticationProviders y cada uno de ellos inspeccione y, si pueden utilizar para autenticarse, regresan con una indicación de "autenticados", "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 LDAP o Servidor de Active Directory, o OpenID, y es uno de los principales puntos de extensión dentro del marco de Spring Security.

barcos
+2

esto no responde la parte más concreta de la pregunta: "¿Cuál es el nombre de la implementación predeterminada de la interfaz' AuthenticationManager'? " Mientras que la respuesta de @ Ralph a continuación sí lo hace. ('org.springframework.security.authentication.ProviderManager') –

+2

Dado que solo hay 1 real' AuthenticationManager', me centré en la esencia de la pregunta, que es "¿qué hace' authenticate' do? ", que requiere algunos antecedentes sobre cómo La primavera se arma. En general, he descubierto que una respuesta enriquecedora que cubra los antecedentes que generan la pregunta es más útil que responder una pregunta específica. – cdeszaq

20

Spring Security único real AuthenticationManager aplicación:

org.springframework.security.authentication.ProviderManager 

Este sistema utiliza diferentes AuthenticationProvider para las tareas de autenticación

El AuthenticationManagerBeanDefinitionParser es responsable de analizar <sec:authentication-manager> sus estados java doc:

Registra el ProviderManager central utilizado por el espacio de nombres configuración, y permite la configuración de un alias, permitiendo que los usuarios de lo hagan referencia en sus beans y vean claramente de dónde proviene el nombre .

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

+0

Esta es la respuesta correcta. – smeeb

Cuestiones relacionadas