2014-02-02 6 views
0

Попытка использовать Spring Security для процесса аутентификации, но получение Bad credentials exception.here как я определил вещи в моем spring-security.xml файлеНеверные учетные данные Исключение | Spring Security

<beans:bean id="passwordEncoder" 
    class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
</beans:bean> 

<beans:bean id="passwordEncoder" 
class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
</beans:bean> 

<authentication-manager id="customerAuthenticationManager"> 
    <authentication-provider user-service-ref="customerDetailsService"> 
    <password-encoder hash="sha" /> 
    </authentication-provider> 
</authentication-manager> 

customerDetailsService наша собственная реализация, оказываемый весной security.In моего Java код при регистрации пользователя, я кодирующим при условии пароля, прежде чем добавить пароль на базу данных, как

import org.springframework.security.authentication.encoding.PasswordEncoder; 
@Autowired 
private PasswordEncoder passwordEncoder; 
customerModel.setPassword(passwordEncoder.encodePassword(customer.getPwd(), null)); 

Когда я пытался отладить мое приложение, оно кажется весна зовут AbstractUserDetailsAuthenticationProvider метод аутентификации и при его выполнении additionalAuthenticationCheck с additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken) authentication); из DaoAuthenticationProvider, он бросает Bad удостоверения исключения в следующей точке

if (authentication.getCredentials() == null) { 
logger.debug("Authentication failed: no credentials provided"); 
    throw new BadCredentialsException(messages.getMessage(
        "AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"), userDetails); 
} 

Я не уверен, где я делаю неправильно и что должно быть сделано здесь, чтобы положить вещи в нужном месте , Я уже проверил, что клиент есть в базе данных и пароль закодирован.

+0

Две фасоли с одинаковым идентификатором? Попробуйте использовать атрибут 'ref'' password-encoder'. –

+0

@AleksandrM: Спасибо, что просто опечатка, я просто скопировал ее дважды: D –

+0

Хорошо. Вы пробовали с ref? –

ответ

1

Alter вашей декларации пароль кодировщик от

<password-encoder hash="sha" /> 

в

<password-encoder ref="passwordEncoder" /> 

Проверьте, если ваши customerDetailsService нагрузки пользователя из базы данных учетных данных. Если вы по-прежнему получаете недействительные учетные данные: добавьте erase-credentials = "false" в ваш authenticationManager.

<authentication-manager id="customerAuthenticationManager" erase-credentials="false"> 
    <authentication-provider user-service-ref="customerDetailsService"> 
    <password-encoder hash="sha" /> 
    </authentication-provider> 
</authentication-manager> 
+0

моя служба обслуживания клиентов загружает пользователя из базы данных правильно, проблема заключается в том, когда вызываются «дополнительныеAuthenticationChecks», но я постараюсь изменить вещи в соответствии с вашими предложение и посмотреть, что произошло –

+1

и что случилось? –

Смежные вопросы