O que é o Autenticationmanager padrão na Spring-Security? Como é que se autentica?

Tenho o seguinte feijão definido:

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

acho que aqui a Primavera usa alguma implementação predefinida de AuthenticationManager.

no meu código Java tenho:

@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;
}
Aqui se chama. Mas eu gostaria de saber qual a implementação de AuthenticationManager Spring usa por padrão, e o que o seu authenticate(...) faz para autenticar (isto é, certifique-se que o nome de utilizador corresponde à senha).

Pode explicar isto?

Author: rapt, 2012-03-20

2 answers

O AuthenticationManager é apenas um contentor para os fornecedores de autenticação, dando uma interface consistente a todos eles. Em a maioria dos casos, o valor por omissão AuthenticationManager é mais do que suficiente.

Quando ligares

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

Está a passar o UsernamePasswordAuthenticationToken para o valor por omissão AuthenticationProvider, que irá usar o userDetailsService para obter o utilizador com base no nome de utilizador e comparar a senha desse utilizador com a do item de autenticação.

Em geral, o AuthenticationManager passa uma espécie de AuthenticationToken para cada um dos é AuthenticationProviders e cada um deles o inspecciona e, se o puderem usar para autenticar, regressam com uma indicação de "autenticado", "não autenticado", ou "não podia autenticar" (o que indica que o fornecedor não sabia como lidar com o símbolo, por isso passou ao processá-lo)

Este é o mecanismo que lhe permite ligar-se a outros esquemas de autenticação, como a autenticação contra um servidor de pasta LDAP ou activo, ou OpenID, e é um dos pontos de extensão principais dentro da mola Quadro de segurança.

 49
Author: cdeszaq, 2013-06-04 13:06:39

Navios de segurança da primavera apenas um real AuthenticationManagerimplementação:

org.springframework.security.authentication.ProviderManager

Isto usa um AuthenticationProvider diferente para as tarefas de autenticação

O AuthenticationManagerBeanDefinitionParser é responsável por analisar <sec:authentication-manager> o seu COD java diz:

Regista o ProviderManager central usado pelo espaço de nomes configuração, e permite a configuração de um alias, permitindo usuários para referenciá-lo em seus grãos e claramente ver onde o nome é vindo de.

Cria o ProviderManager e adiciona os dados especificados. Se no provides for especificado no xml, então ele adiciona um NullAuthenticationProvider. Este é pelo menos um provedor que faz notar do que prevenir exceções de configuração.

 26
Author: Ralph, 2012-04-27 12:46:27