Как установить salt для ShaPasswordEncoder?

219
01 мая 2018, 02:46

Нужно устанвить 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.

Спасибо.

READ ALSO
Выделить ячейки в GridView

Выделить ячейки в GridView

Как реализовать При нажатии на GridView подсветить ее и изьять информацию?

165
Подключение GUI к БД

Подключение GUI к БД

Работаю с библиотекой JavaFX, и вот не понимаю вообще,как мне к GUI подключить БД, или лучше сделать коллекции значений,чтобы они были в роли бд?

182
Родительское окно Java

Родительское окно Java

имеется вопросНиже представлен код:

191
Ошибка Connection exception: java.net.ConnectException: Connection timed out: connect

Ошибка Connection exception: java.net.ConnectException: Connection timed out: connect

Написан простенький чат на JavaСерверная часть стартует, клиентская выдает ошибку:

175