Используйте простое веб-приложение Spring Security с кодировкой пароля:
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="personService">
<security:password-encoder hash="md5" ref="passwordEncoder">
<!-- <security:salt-source user-property="username"/> -->
</security:password-encoder>
</security:authentication-provider>
</security:authentication-manager>
Кодирование также простое:
person.setPassword(encoder.encodePassword(person.getPassword(), null));
Таким образом, в базе данных все пароли будут закодированы. Теперь я хочу выполнить аутентификацию некоторого пользователя с определенным именем пользователя в приложении. Раньше (когда пароли были в виде открытого текста) было так:
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
username, password);
Authentication authentication = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
Но теперь я получаю закодированный пароль из БД и не могу выполнить аутентификацию, как раньше.
Проблема. что Spring не знает, что пароль исходит от уже закодированного UsernamePasswordAuthenticationToken. И он это кодирует второй раз. Кто может помочь?
Изменить
Итак, я вижу здесь два решения:
Есть другие? Что лучше?