Software Development Notions

Resumen login JPA (PostgreSQL)

April 17, 2020

Todo lo necesario para implementar un login mediante JPA, utilizando Postgresql como motor de base de datos.

  1. Definir un modelo
@Entity
public class Usuario {
    @Id
    private int id;
    private String nombre;
    private String clave;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
}
  1. Crear un repositorio
public interface UsuarioRepository extends JpaRepository<Usuario,Integer> {
    Usuario findByNombre(String nombre);
}
  1. Servicio de usuarios
@Service
public class UsuarioService implements UserDetailsService {
    @Autowired
    private UsuarioRepository repositorio;

    @Autowired
    private BCryptPasswordEncoder encoder;

    public void crearUsuario() {
        Usuario usuario = new Usuario();
        usuario.setId((int)repositorio.count()+1);
        usuario.setClave(encoder.encode("1234"));
        usuario.setNombre("pady");
        repositorio.save(usuario);
    }
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Usuario encontrado = repositorio.findByNombre(username);
        List<GrantedAuthority> roles = new ArrayList<>();
        roles.add(new SimpleGrantedAuthority("ADMIN"));
        UserDetails userDet = new User(encontrado.getNombre(),encontrado.getClave(),roles);
        return userDet;
    }

}
  1. Security Config
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UsuarioService userServiceDetails;
    @Autowired
    private BCryptPasswordEncoder bcrypt;
    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        return bCryptPasswordEncoder;
    }

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }
}
  1. Creación de usuarios
@SpringBootTest
class PracticaSpringBootApplicationTests {
 @Autowired
 private UsuarioService servicio;
 @Test
 void contextLoads() {
  servicio.crearUsuario();
 }
}

Welcome to my blog about Software Development! I would like to invite you to learning with me 👨‍💻

Search all posts