Spring boot bcrypt.BCryptPasswordEncoder и проблема аутентификации - PullRequest
0 голосов
/ 23 ноября 2018

Я настраиваю Spring Security впервые, но кажется, что Spring не видит необработанный пароль моего клиента, когда я получаю эту ошибку.

o.s.s.c.bcrypt.BCryptPasswordEncoder : Empty encoded password

Похоже,очевидная проблема, но позвольте мне, я просто не могу понять это после многих попыток.Мой класс SecurityConfig: ...

@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired
CustomUserDetailsService userDetailsService;
@Autowired
BCryptPasswordEncoder bCryptPasswordEncoder;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {  auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}

}

Это моя служба UserServiceDetails.

открытый класс CustomUserDetailsService реализует UserDetailsService {

@Autowired
private UserRepository repo;


@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

    Optional<Owner> optionalUser = repo.findByUsername(username);
    optionalUser
        .orElseThrow(() -> new UsernameNotFoundException("Username not 
found"));

    return optionalUser
        .map(CustomUserDetails::new).get();
    }
}

У меня также есть следующий компонентсконфигурированный

public class WebMvcConfig implements WebMvcConfigurer {

@Bean
public BCryptPasswordEncoder passwordEncoder() {
    BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
    return bCryptPasswordEncoder;
}

} Это мой сервис пользователя.

public class CustomUserDetails extends Owner implements UserDetails {

public CustomUserDetails(final Owner owner) {
    super();
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {

    return getRoles().stream()
        .map(role -> new SimpleGrantedAuthority("ROLE_"+getRoles()))
        .collect(Collectors.toList());

}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return true;
}

}

Я наверняка что-то упускаю, но не могу понять это.Из HttpRequest я знаю, что пароль отправляется в Систему, как я вошел в систему.

1 Ответ

0 голосов
/ 08 декабря 2018

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

return optionalUser
    .map(CustomUserDetails::new).get();
 }

Итак, мой новый класс UserDetailsService - это ...

@Service
public class CustomUserDetailsService implements UserDetailsService {

@Autowired
private UserRepository repo;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException 
{

    Optional<Owner> optionalUser = repo.findByUsername(username);
    Owner user = optionalUser.get();

    return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), getAuthorities(user));
}
public Collection<? extends GrantedAuthority> getAuthorities(Owner user) {

    return user.getRoles().stream()
        .map(role -> new SimpleGrantedAuthority("ROLE_"+user.getRoles()))
        .collect(Collectors.toList());
}
}
...