Criei o projeto de acordo com as aulas do Spring Boot para criar uma APRI Rest.
Após está tudo funcionando comecei a mudar para algumas configurações como o banco de dados que estava apontando para h2 para um banco Oracle e funcionou normalmente.
Quando comecei a mudar para fazer a autenticação do usuário foi que deu problema. segue abaixo o códigos fontes que foram alterardos.
package br.com.alura.forum.modelo;
import java.util.ArrayList; import java.util.Collection; import java.util.List;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.MapsId; import javax.persistence.OneToOne; import javax.persistence.SecondaryTable;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails;
@Entity public class Usuario implements UserDetails {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
private String login;
private String senha;
@ManyToOne
@JoinColumn(name = "id_perfil_padrao")
private Perfil perfil;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Usuario other = (Usuario) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getlogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
// @Override // public Collection<? extends GrantedAuthority> getAuthorities() { // return this.perfis; // }
@Override
public String getPassword() {
return this.senha;
}
@Override
public String getUsername() {
return this.login;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<Perfil> perfis = new ArrayList<>();
perfis.add(this.perfil);
return perfis;
}
}
package br.com.alura.forum.modelo;
import java.util.List;
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Table;
import javax.persistence.OneToMany;
import org.springframework.security.core.GrantedAuthority;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity @Table(name = "perfil_acesso") public class Perfil implements GrantedAuthority {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
@OneToMany
@JoinColumn(name = "id_perfil_padrao") // Esta coluna está na tabela "usuario".
private List<Usuario> usuario;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public String getAuthority() {
return nome;
}
}
@Service public class AutenticacaoService implements UserDetailsService {
@Autowired
private UsuarioRepository repository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Optional<Usuario> usuario = repository.findByLogin(username);
if(usuario.isPresent()) {
return usuario.get();
}
throw new UsernameNotFoundException("Usuário Inválido!");
}
}