Olá Rodrigo!
Primeiramente muito obrigado pela resposta.
Tenho mais uma dúvida a parte de encriptação da senha do usuário eu posso usar a própria classe BCryptPasswordEncoder para realizar o processo de encriptação, na própria classe AutenticacaoService? Irei deixar o código de exemplo da minha ideia e gostaria de saber se está correto em termos de padrões (As classes são AutenticacaoService e CadastrarUsuarioController).
`package br.com.alura.forum.config.security;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import br.com.alura.forum.modelo.Usuario;
import br.com.alura.forum.repository.UsuarioRepository;
@Service
public class AutenticacaoService implements UserDetailsService {
@Autowired
private UsuarioRepository usuarioRepository;
@Autowired
private PasswordEncoder encoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Optional<Usuario> usuario = usuarioRepository.findByEmail(username);
if(usuario.isPresent()) {
return usuario.get();
}
throw new UsernameNotFoundException("Dados inválidos!");
}
public UserDetails cadastrarUsuario(Usuario usuario) throws UsernameNotFoundException {
Optional<Usuario> user = usuarioRepository.findByEmail(usuario.getEmail());
if(user.isEmpty()) {
Usuario u = new Usuario();
u.setEmail(usuario.getEmail());
u.setNome(usuario.getNome());
u.setSenha(encoder.encode(usuario.getSenha()));
usuarioRepository.save(u);
return u;
}
throw new UsernameNotFoundException("Usuário existente");
}
}
`
Classe CadastrarUsuarioController que criei e nessa classe injetei o serviço de autenticação para ter acesso ao método de cadastrar usuário.
package br.com.alura.forum.controller;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import br.com.alura.forum.config.security.AutenticacaoService;
import br.com.alura.forum.modelo.Usuario;
@RestController
@RequestMapping("/cadastrar")
public class CadastrarUsuarioController {
@Autowired
private AutenticacaoService autenticacaoService;
@PostMapping
@Transactional
public ResponseEntity<UsuarioDto> cadastrarUsuario(@RequestBody UsuarioDto usuarioDto) {
Usuario user = usuarioDto.converter();
autenticacaoService.cadastrarUsuario(user);
return ResponseEntity.ok(new UsuarioDto(user));
}
}
Grato!