2013-08-29 4 views
2

создать весеннюю MVC приложение, которое использует весеннюю безопасность для проверки подлинности, вот весна-security.xmlВесна безопасности авто Войти после Registeration

<http use-expressions="true"> 
    <form-login login-page="/homepage.jsp" default-target-url="/homepage.jsp" authentication-failure-url="/homepage.jsp?login-success=false" /> 
    <logout logout-success-url="/homepage.jsp" /> 
</http> 
<authentication-manager alias="authenticationManager" > 
    <authentication-provider> 
    <password-encoder hash="sha" /> 
    <jdbc-user-service data-source-ref="marketDataSource" 

     users-by-username-query=" 
      select email_address, password, '1' 
      from user where email_address=?" 

     authorities-by-username-query=" 
      select email_address, 'ROLE_USER' from user 
      where email_address=?" 
     /> 
    </authentication-provider> 
</authentication-manager> 

когда новый пользователь попытается зарегистрировать, он заполнить в регистрации из и нажмите представить, что будет создавать новый пользователь, если регистрация успешно завершена, я пытаюсь проверить подлинность зарегистрированного пользователя с помощью этого метода:

private void authenticateUserAndSetSession(User user, HttpServletRequest request) { 

List<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>(); 
grantedAuthorities.add(new GrantedAuthorityImpl("ROLE_USER")); 
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
    user.getEmailAddress(), user.getPasswordSha(), grantedAuthorities); 

request.getSession(); 

token.setDetails(new WebAuthenticationDetails(request)); 
try { 
    Authentication authenticatedUser = authenticationManager 
     .authenticate(token); 
    SecurityContextHolder.getContext().setAuthentication(authenticatedUser); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

Я проверил это сообщение Auto login after successful registration, чтобы сделать предыдущий метод, но когда я пытаюсь его использовать, он выбрасывает исключение Bad Credential, что не так с этим решением?

+0

Вы передаете зашифрованный пароль в 'UsernamePasswordAuthenticationToken'? –

+0

yes Я передаю зашифрованный пароль –

+0

В этом проблема. В связанной записи они используют чистый пароль. –

ответ

0

Я столкнулся с подобной проблемой. В устаревшем коде пароль был хэширован вручную.

Лучше всего хранить объект класса User (возможно, это простая привязка формы) с простым паролем и очистить его позже. Освобождение учетных записей также несет ответственность за весеннюю безопасность (интерфейс org.springframework.security.core.CredentialsContainer). Если невозможно удалить тег кодировщика или использовать обычный текстовый кодировщик <password-encoder hash="plaintext"/>.

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