Нужно устанвить salt
для ShaPasswordEncoder
, но не очень понятен принцип взаимодействия с классом MessageDigestPasswordEncoder
.
Если я все правильно понял то salt
это префикс который добавляется к строке перед тем как вычислять для нее hash
. У него есть метод:
String encodePassword(String rawPass, Object salt)
И тут все понятно какую строку пошлем вторым параметром такой префикс и добавится при хешировании, но вероятно при конфигурации Spring Security
я делаю это в методе:
void configure(HttpSecurity http)
Необходимо указать что при хешировании мы будем использовать соответстующий префикс, но у ShaPasswordEncoder
нет конструктора или сеттера с помощью которого можно было бы указать какой salt
я хочу использовать.
Вот метод который инициализирует AuthenticationProvider
и ShaPasswordEncoder
соответственно:
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(userDetailsService);
authenticationProvider.setPasswordEncoder(new ShaPasswordEncoder());
return authenticationProvider;
}
И в методе configure
я его добавляю :
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/rest/user/login").permitAll();
http.csrf().disable()
.authenticationProvider(authenticationProvider())
...
}
@Override
protected void configure(AuthenticationManagerBuilder auth) {
auth.authenticationProvider(authenticationProvider());
}
Может быть мне нужно делать это в моей имплементации UserDetailsService
?
@Override
public UserDetailsImpl loadUserByUsername(final @NonNull String username) {
final User user = userService.getUserByUsername(username);
if (user == null) {
throw new UsernameNotFoundException(username);
}
List<GrantedAuthority> authorities = user.getRoles()
.stream().map(Role::getRole).collect(toList())
.stream().map(SimpleGrantedAuthority::new).collect(toList());
return new UserDetailsImpl(user, authorities);
}
Но он всроде бы работает только с username
и к шифруемому паролю отношения не имеет. Есть SaltSource
который вроде для этого и предназначен, но не понятно как в данном контексте его можно использовать.
Как мне в таких условиях специфицировать ShaPasswordEncoder
для работы с моим salt
, "my-sha-value"
на пример. И главное, что в моих рассуждениях не верно, из за чего мне не найти возможность специфицировать salt
?
В зависимостях использую стартер spring-boot-starter-security 1.5.9
.
Спасибо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как реализовать При нажатии на GridView подсветить ее и изьять информацию?
Работаю с библиотекой JavaFX, и вот не понимаю вообще,как мне к GUI подключить БД, или лучше сделать коллекции значений,чтобы они были в роли бд?
Написан простенький чат на JavaСерверная часть стартует, клиентская выдает ошибку: