Usare con Java dati presenti nel database per effettuare un Login

di il
6 risposte

Usare con Java dati presenti nel database per effettuare un Login

Devo realizzare un Login con Java, con hybernate ho già creato nel mio SQL delle tabelle con dentro e-mail e password dei dottori, come faccio a fare una richiesta get e a prendere quei valori che sono dentro le tabelle?
Sto usando Angular + bootstrap per la parte front-end e per il back-end sto usando Spring-boot.

Ricapitolando la mia domanda è: come collego il login ai dati che già ho nel database? Devo fare una richiesta HTTP get?
Grazie per le risposte

package com.database.idsdatabase;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity // This tells Hibernate to make a table out of this class
public class Dottore {
    @Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	
	private long id;

	private String email;

    	private String password;
    
	public Dottore(){		
	}

	public Dottore(final long id, final String email, final String password) {
		this.id = id;
		this.email = email;
       	        this.password = password;
	}

	@Override
	public String toString(){
		return "" + id + "" + email + "" + password;
    }
    
    public long getid() {
		return id;
	}

	public void setid(final Long id) {
		this.id = id;
	}

	public String getemail() {
		return email;
	}

	public void setemail(final String email) {
		this.email = email;
	}

	public String getpassword() {
		return password;
	}

	public void setpassword(final String password) {
        this.password = password;
	}




}

6 Risposte

  • Re: Usare con Java dati presenti nel database per effettuare un Login

    Denis Arco ha scritto:


    Ricapitolando la mia domanda è: come collego il login ai dati che già ho nel database? Devo fare una richiesta HTTP get?
    Il client certamente dovrà fare una request HTTP al back-end per passare username/password .... e oltretutto in POST (non in GET !). Poi le questioni di sicurezza (HTTPS, ecc...) sono un altro paio di maniche ...

    Il punto è che hai solo mostrato una classe di "entity" ma non hai precisato come è fatto (se lo hai già valutato/implementato) lo strato di "repository" a livello di Spring. Hai usato Spring Data JPA? Altro?
  • Re: Usare con Java dati presenti nel database per effettuare un Login

    Il Controller
    package com.database.idsdatabase;
    
    import java.util.List;
    import com.database.idsdatabase.Dottore;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @CrossOrigin(origins = "http://localhost:4200")
    public class DottoreController {
    
        public DottoreController(DottoreRepository dottoreRepository) {
            this.dottoreRepository = dottoreRepository;
        }
         
        private DottoreRepository dottoreRepository;
     
        @GetMapping("/dottori")
        public List<Dottore> getDottori() {
            return (List<Dottore>) dottoreRepository.findAll();
        }
     
        @PostMapping("/dottori")
        void addDottore(@RequestBody Dottore dottore) {
            dottoreRepository.save(dottore);
        }
    }
    La Repository
    package com.database.idsdatabase;
    
    import org.springframework.data.repository.CrudRepository;
    import com.database.idsdatabase.Dottore;
    
    public interface DottoreRepository extends CrudRepository<Dottore,Long> {
    
    }
    Il Main
    
    package com.database.idsdatabase;
    
    import java.util.stream.Stream;
    import com.database.idsdatabase.Dottore;
    import com.database.idsdatabase.User;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    
    @SpringBootApplication
    public class IdsdatabaseApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(IdsdatabaseApplication.class, args);
        }
    
        @Bean
        CommandLineRunner init(UserRepository userRepository, DottoreRepository dottoreRepository) {
            return args -> {
                Stream.of("Utente").forEach(name -> {
                    User user = new User(0, name, name.toLowerCase() + "@domain.com", name, name, name);
    
                    userRepository.save(user);
                });
    
                Stream.of("Dottore").forEach(email -> {
                    Dottore dottore = new Dottore(0, email.toLowerCase() + "@domain.com", email);
    
                    dottoreRepository.save(dottore);
                });
                    
                    
                
                userRepository.findAll().forEach(System.out::println);
                dottoreRepository.findAll().forEach(System.out::println);
            };
    
        }
    }
    
    
  • Re: Usare con Java dati presenti nel database per effettuare un Login

    Per il resto lo ho collegato ad Angular con il TypeScript ma non penso che serva per ora, prima le richieste le devo fare con Java giusto?
  • Re: Usare con Java dati presenti nel database per effettuare un Login

    Ok, hai usato CrudRepository, quindi appunto Spring Data JPA.

    Ma innanzitutto hai configurato tutto correttamente per poter usare JPA con Spring Boot?
    Generalmente si mette nel pom.xml lo "starter" per JPA che si chiama spring-boot-starter-data-jpa
    Più altro specifico per il dbms (banalmente, almeno il driver JDBC).

    Poi al tuo DottoreRepository dovresti mettere @Repository, altrimenti non diventa un "bean" Spring e quindi non lo inietti da nessuna parte.

    E comunque devi poi usare appropriatamente Spring Data JPA perché ad esempio per il login devi fare una query specifica per tirar su l'utente a fronte dello username.

    Denis Arco ha scritto:


    prima le richieste le devo fare con Java giusto?
    Beh, certo prima devi implementare la parte back-end. E magari la provi al volo con qualche strumento tipo Postman o altro.
  • Re: Usare con Java dati presenti nel database per effettuare un Login

    andbin ha scritto:


    Ok, hai usato CrudRepository, quindi appunto Spring Data JPA.

    Ma innanzitutto hai configurato tutto correttamente per poter usare JPA con Spring Boot?
    Generalmente si mette nel pom.xml lo "starter" per JPA che si chiama spring-boot-starter-data-jpa
    Più altro specifico per il dbms (banalmente, almeno il driver JDBC).

    E comunque devi poi usare appropriatamente Spring Data JPA perché ad esempio per il login devi fare una query specifica per tirar su l'utente a fronte dello username.

    Beh, certo prima devi implementare la parte back-end. E magari la provi al volo con qualche strumento tipo Postman o altro.
    Sisì nel mio pom.xml c'è spring-boot-starter-data-jpa ma non ho capito, a cosa serve Postman? Hai qualche esempio che posso guardare per quanto riguarda la query per l'utente e l'username?
    Grazie mille per le risposte!!
  • Re: Usare con Java dati presenti nel database per effettuare un Login

    Denis Arco ha scritto:


    ma non ho capito, a cosa serve Postman?
    https://www.getpostman.com/downloads
    È uno strumento (free) per "provare" richieste HTTP principalmente per servizi REST (che è il tuo caso).

    Denis Arco ha scritto:


    Hai qualche esempio che posso guardare per quanto riguarda la query per l'utente e l'username?
    Ti conviene (anche) leggere la documentazione ufficiale di Spring Data JPA (che non è neanche lunghissima) perché altrimenti non ne esci facilmente:
    https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

    Il punto essenziale da capire è che con questa API tu definisci delle interface Java che tipicamente estendono quelle di Spring Data JPA (es. CrudRepository). Queste interfacce però non le devi "implementare" tu ... le implementa Spring Data JPA andando a "guardare" come sono fatti i metodi dichiarati.
    Infatti puoi mettere metodi custom seguendo una serie di regole per fare query speciali.

    Esempio proprio basilare: se avessi una entity Libro (con attributi titolo, annoPubblicazione, ecc...) e una interface LibroRepository che estende CrudRepository<Libro,Long>, allora in questa tua interface puoi mettere un metodo speciale del tipo:

    List<Libro> findByAnnoPubblicazione(int anno);

    Dal nome del metodo, Spring Data JPA "capisce" che è un find (=query di ricerca), c'è un "By" quindi c'è un filtro di cui un campo di filtro è annoPubblicazione.
Devi accedere o registrarti per scrivere nel forum
6 risposte