Spring Security não retornando objeto UserDetails, apenas nome de usuário
Eu pensava que minha implementação de autorização havia sido concluída, mas ao tentar recuperar o objeto UserDetails, tudo o que estou recebendo é o nome de usuário.
Estou usando oauth com as seguintes informações.
Configurando o AuthenticationManager:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
Com isso feito, eu posso depurar no meu userDetailsService:
@Service
public class UserServiceImpl implements UserService, UserDetailsService {
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
MyUser persistedUser = userRepository.findByEmail(email);
if (persistedUser == null) {
throw new UsernameNotFoundException(String.format("The email %s doesn't exist", email));
}
List<GrantedAuthority> authorities = new ArrayList<>();
MyUser inMemoryUser = new MyUser(persistedUser.getEmail(), null, persistedUser.getEnabled(), false,
false, false, authorities);
return inMemoryUser;
}
}
Isso termina bem e meu cliente recebe de volta o JWT. Mas encontrei o seguinte problema ao depurar um método de controlador posterior.
@GetMapping
public @ResponseBody Iterable<Curriculum> getMyCurriculums(@AuthenticationPrincipal MyUser injectedUser) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
MyUser principle = (MyUser) auth.getPrincipal();
return curriculumService.findByUser(principle);
}
Nesse caso, injectedUser = null, auth é uma OAuth2Authentication e o princípio é uma String - o nome de usuário. Deve ser MyUser