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?
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.
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.
Navios de segurança da primavera apenas um real AuthenticationManager
implementaçã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.