Настройка AuthenticationManagerBuilder для использования репозитория пользователей - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь обезопасить API-интерфейсы Rest, используя Spring Boot и JWT.Прямо сейчас мне удалось собрать воедино части конфигурации, чтобы получить токен, сгенерированный с жестко запрограммированным именем пользователя и паролем.Я хотел бы, чтобы вместо этого использовались мой класс пользователя и репозиторий.

Я смог жестко закодировать пользователя здесь

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
        .withUser("user")
        .password(passwordEncoder().encode("password"))
        .authorities("ROLE_USER");
}

Должен ли я указать это на мой UserDetailsService?Как бы я это сделал?

@Service
public class UserSecurityService implements UserDetailsService {

  private static final Logger LOG = LoggerFactory.getLogger(UserSecurityService.class);

  @Autowired
  private UserRepository userRepository;

  @Override
  public UserDetails loadUserByUsername (String username) throws UsernameNotFoundException {
    User user = userRepository.findByUsername(username);

    if (null == user) {
        LOG.warn("username not found");
        throw new UsernameNotFoundException("Username" + username + "not found");
    }
    return user;
  }
}

1 Ответ

0 голосов
/ 30 января 2019

Для UserDetailsService вам необходимо DaoAuthenticationProvider для обработки любых запросов на аутентификацию.

Для этого:

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

// you shouldn't use plain text
@Bean
public PasswordEncoder encoder() {
    return new BCryptPasswordEncoder();
}

выше внутренне конфигурирует DaoAuthenticationProvider.Кроме того, вы можете определить bean-компонент для внедрения:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(authenticationProvider());
}

@Bean
public DaoAuthenticationProvider authenticationProvider() {
    DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
    authProvider.setUserDetailsService(userDetailsService);
    authProvider.setPasswordEncoder(encoder());
    return authProvider;
}
...