Sou novo no springboot e mergulhei em um projeto para aprender. Tenho um UserService e um arquivo java UserService. Vou precisar usar o UserDetailsService estendido, mas não sei onde estendê-lo?
caso de uso: recuperando nome de usuário em um arquivo java JWTAUTHFILTER separado
if(userEmail != null && SecurityContextHolder.getContext().getAuthentication() == null){
UserDetails userDetails = userService.findByUsername(userEmail);
}
Meu UserService.java
public interface UserService {
UserDto createUser(UserDto user);
}
Minha classe Impl:
@Service
public class UserImpl implements UserService {
private final UserRepository userRepository;
private PasswordEncoder passwordEncoder;
@Autowired
public UserImpl(final UserRepository userRepository){
this.userRepository = userRepository;
}
@Override
public UserDto createUser(UserDto user) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
UserEntity userEntity = userToUserEntity(user);
userRepository.save(userEntity);
return user;
}
@Override
public Optional<UserDto> findByUsername(String username) {
Optional<UserEntity> userName = userRepository.findByUsername(username);
return userName.map(user -> userEntityToUserModel(user));
}
private UserEntity userToUserEntity(final UserDto user){
// UserEntity userEntity = new UserEntity();
// userEntity.setUsername(user.getUsername());
// userEntity.setId(user.getId());
// userEntity.setPassword(user.getPassword());
// userEntity.setRole(user.getRole());
return UserEntity.builder()
.id(user.getId())
.username(user.getUsername())
.role(user.getRole())
.password(user.getPassword())
.build();
}
private UserDto userEntityToUserModel (final UserEntity userEntity){
return UserDto.builder()
.id(userEntity.getId())
.password(userEntity.getPassword())
.role(userEntity.getRole())
.username(userEntity.getUsername())
.build();
}
}
Estou muito confuso, o tutorial que estou usando não está usando DTO e um serviço separado e implementação de serviço. Alguém pode me ajudar?
O seu
CustomUserDetailsService
pode ficar assim:É basicamente isso. O Spring Security requer um bean do tipo
UserDetailsService
para verificar se o usuário existe ao efetuar login (ele tira toda a entidade User do repositório, para também fazer verificações de senha posteriores em sua lógica).