Spring security + spring jpa + postgres

di il
10 risposte

Spring security + spring jpa + postgres

Ciao a tutti,

Purtroppo non riesco a realizzare tale progetto, che su internet non trovo esempi buoni e concreti, devo fare il login con username e password in json e mi restituisce la risposta nome,cognome,ecc......

database:
Tabelle --> Utenti e Password
Realizzato

Spring Jpa:
Creo la mappatura.
Realizzato

Spring security:
come faccio a leggere username nella tabella utenti e la password nella tabella Password, visto che hanno lo stesso id?

Avete qualche guida completa è semplice?

10 Risposte

  • Re: Spring security + spring jpa + postgres

    imparareJava ha scritto:


    devo fare il login con username e password in json e mi restituisce la risposta nome,cognome,ecc......
    Cosa vuol dire esattamente? Che hai un endpoint che riceve una richiesta in POST e a cui passi un body in json con username e password?

    Per quanto ne so, per l'autenticazione con username E password Spring Security supporta 3 meccanismi predefiniti:
    - form login
    - basic authentication
    - digest authentication

    Nessuno di questi c'entra con json. Quindi la mia supposizione è che stai facendo qualcosa di molto "fuori" dagli standard di Spring Security.

    Ma poi c'è un'altra questione che non hai detto. Ok, fai la richiesta di login ed ottieni nome ecc... Poi però come (e dove!) mantieni le informazioni sul fatto che quell'utente è "loggato" per tutte le successive richieste? Con la sessione HTTP? Con un token che viene rimandato al server ogni volta? Altro? ...
  • Re: Spring security + spring jpa + postgres

    Perfetto.
    Mi puoi aiutare a realizzare tale Demo, con username e password con due tabelle differenti che hanno lo stesso ID.
    Qualche esempio.
  • Re: Spring security + spring jpa + postgres

    imparareJava ha scritto:


    Perfetto.
    Mi puoi aiutare a realizzare tale Demo, con username e password con due tabelle differenti che hanno lo stesso ID.
    Qualche esempio.
    A parte il fatto che continui a non specificare come intendi usare Spring Security ..... Fare un controller che riceve in POST un JSON con username+password e fornisce altro in risposta, lo puoi fare normalmente anche senza Spring Security. Quindi la security (in senso generale) come dovrebbe entrare in gioco in tutto questo?

    Mostra almeno come hai definito le due entity che rappresentano quelle due tabelle. Se hanno stesso ID, vuol dire che c'è condivisione della chiave primaria e quindi dovresti aver definito nelle entity una relazione one-to-one.
    Se hai scritto a mano un SQL per le create table, mostra anche questo ..
  • Re: Spring security + spring jpa + postgres

    Non utilizzo spring security.

    Il progetto è il seguente:

    Model:

    User
    
    package com.security.model;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "utenti")
    public class User {
    	
    	@Id
    	@Column(name = "id_utente")
        private Integer id_utente;
    	
    	@Column(name = "username")
    	private String username;
    	
    	@Column(name = "cognome")
    	private String cognome;
    	
    	@Column(name = "nome")
    	private String nome;
    	
    	@Column(name = "email")
    	private String email;
    	
    	@OneToOne(fetch = FetchType.LAZY,
                cascade =  CascadeType.ALL,
                mappedBy = "user")
        private Password password;
    	
    	
    
    }
    
    
    Password:
    
    package com.security.model;
    
    import java.security.MessageDigest;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "password")
    public class Password {
    
    	@Id
    	@Column(name = "id_utente")
        private Integer id_utente;
    	
    	@Column(name = "password")
    	private String password;
    	
    	@Column(name = "fl_valida")
    	private boolean fl_valida;
    
    	@OneToOne(fetch = FetchType.LAZY, optional = false)
        @JoinColumn(name = "id_utente", nullable = false)
    	private User user;
    
    	public String encryptSHA1(String plainText) {
    		String encrypted = null;
    
    		try {
    			MessageDigest md = MessageDigest.getInstance("SHA1");
    			byte[] passBytes = plainText.getBytes();
    			md.reset();
    			byte[] digested = md.digest(passBytes);
    			StringBuffer sb = new StringBuffer();
    
    			for (int i = 0; i < digested.length; i++) {
    				sb.append(Integer.toHexString(0xff & digested[i]));
    			}
    
    			encrypted = sb.toString();
    		} catch (Throwable th) {
    			System.out.println(th.getMessage());
    		}
    
    		return encrypted;
    	}
    
    }
    
    
    

    DTO:
    
    package com.security.dto;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class LoginDto {
    
        private String username;
        private String password;
    	
    }
    
    
    

    Repository:

    UserRepository
    
    package com.security.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import com.security.model.User;
    
    public interface UserRepository extends JpaRepository<User,Integer>{
    
    	User findByUsername(String username);
    	
    
    }
    
    
    PasswordRepository
    
    package com.security.repository;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import com.security.model.Password;
    
    public interface PasswordRepository extends JpaRepository<Password,Integer>{
    
    	Password findByPassword(String password);
    
       
    }
    
    
    

    Service:

    ApiResponse --> qui mi deve restituire nome, congome,ecc.. dell'untente
    
    package com.security.service;
    
    import lombok.Data;
    
    @Data
    public class ApiResponse {
    
        private int status;
        private String message;
        private Object result;
    
        public ApiResponse(int status, String message, Object result){
            this.status = status;
            this.message = message;
            this.result = result;
        }
    
    
    }
    
    

    UserService:
    
    package com.security.service;
    
    import java.util.List;
    
    import com.security.dto.LoginDto;
    import com.security.model.User;
    
    public interface UserService {
    	
    	public ApiResponse login(LoginDto loginDto);
    	public  List<User> userAll();
    
    }
    
    
    

    UserServiceImpl:
    
    package com.security.service;
    
    import java.util.List;
    
    import javax.transaction.Transactional;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.security.dto.LoginDto;
    import com.security.model.Password;
    import com.security.model.User;
    import com.security.repository.PasswordRepository;
    import com.security.repository.UserRepository;
    
    @Transactional
    @Service
    public class UserServiceImpl implements UserService {
    
    	@Autowired
    	private UserRepository userRepository;
    
    	@Autowired
    	private PasswordRepository passwordRepository;
    
    	public ApiResponse login(LoginDto loginDto) {
    
    		Password password = new Password();
    		User user = new User();
    
    		if ((user.getId_utente() == password.getId_utente()) && password.isFl_valida() == true) {
    
    			// search Username
    			user = userRepository.findByUsername(loginDto.getUsername());
    
    			// search Password
    			password = passwordRepository.findByPassword(loginDto.getPassword());
    
    			// Decript HASH
    			String passwordHash = password.encryptSHA1(password.getPassword());
    			
    			password.setPassword(passwordHash);
    			user.setPassword(password);
    			
    			return new ApiResponse(200, "Login success", user);
    
    		} else {
    
    			if (!(user.getId_utente() == password.getId_utente())) {
    				System.out.println("User not exsist!");
    			}
    		}
    
    		return null;
    
    	}
    	
    	public List<User> userAll() {
    		return userRepository.findAll();
    	}
    
    }
    
    
    
    

    Controller:

    UserController
    
    package com.security.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    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.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.security.dto.LoginDto;
    import com.security.model.User;
    import com.security.service.ApiResponse;
    import com.security.service.UserService;
    
    @RestController
    @RequestMapping("/users")
    public class UserController {
    
    	@Autowired
    	private UserService userService;
    
    	//Login Username and Password
    	@PostMapping("/login")
    	public ApiResponse login(@RequestBody LoginDto loginDto) {
    		return userService.login(loginDto);
    	}
    	
    	//Return Utenti
    	@GetMapping("/all")
    	public List<User> userAll() {
    		return userService.userAll();
    	}
    }
    
    

    I miei problemi:

    1) Adesso l'errore che mi restituisce è il seguente:
    org.hibernate.HibernateException: More than one row with the given identifier was found: 1093, for class: com.security.model.Password
    Come posso risolvere? visto che è un problema di mappatura 1 to 1.

    2) Ho un dubbio nel metodo login di UserServiceImpl, in pratica la password ricevuta viene decriptata in Hash, è stata impostata bene?
  • Re: Spring security + spring jpa + postgres

    imparareJava ha scritto:


    2) Ho un dubbio nel metodo login di UserServiceImpl, in pratica la password ricevuta viene decriptata in Hash, è stata impostata bene?
    
    	public String encryptSHA1(String plainText) {
    		String encrypted = null;
    
    		try {
    			MessageDigest md = MessageDigest.getInstance("SHA1");
    			byte[] passBytes = plainText.getBytes();
    			md.reset();
    			byte[] digested = md.digest(passBytes);
    			StringBuffer sb = new StringBuffer();
    
    			for (int i = 0; i < digested.length; i++) {
    				sb.append(Integer.toHexString(0xff & digested[i]));
    			}
    
    			encrypted = sb.toString();
    		} catch (Throwable th) {
    			System.out.println(th.getMessage());
    		}
    
    		return encrypted;
    	}
    
    NO. Già questo non va affatto bene:
    - innanzitutto sarebbe stato meglio metterlo altrove come metodo statico di "utilità", in modo magari da essere anche facilmente unit-testable.
    - il reset() NON serve (ottieni già un nuovo MessageDigest)
    - quel getBytes() non è appropriato, perché utilizza il charset della piattaforma e quale sia ... boh, dipende dal Sistema Operativo. In questi casi va sempre specificato un charset ben preciso (es. UTF-8 o UTF-16) in modo che la conversione String->bytes sia assolutamente "stabile" e indipendente dal SO.
    - il Integer.toHexString non è sufficiente perché ottieni 1 o 2 digit hex. E così facendo ottieni una stringa hex "incomprensibile" in generale. Meglio sarebbe usare lo String.format usando %02X come formato
    - il catch di Throwable è "vago" (oltre al fatto che fa solo un banale println su out). Se c'è una eccezione lì allora è qualcosa di "grave", andrebbe buttato fuori qualcosa di più serio tipo un java.lang.Error.

    imparareJava ha scritto:


    
    	public ApiResponse login(LoginDto loginDto) {
    
    		Password password = new Password();
    		User user = new User();
    
    		if ((user.getId_utente() == password.getId_utente()) && password.isFl_valida() == true) {
    
    Anche questo è molto discutibile. Hai appena creato un nuovo User ( new User() ), che cosa ti aspetti che contenga?? Come fai a dire user.getId_utente() ? che abbia quale id??

    imparareJava ha scritto:


    1) Adesso l'errore che mi restituisce è il seguente:
    org.hibernate.HibernateException: More than one row with the given identifier was found: 1093, for class: com.security.model.Password
    Come posso risolvere? visto che è un problema di mappatura 1 to 1.
    La domanda in realtà sarebbe: come vengono generati gli id? Nelle entity non c'è il @GeneratedValue. Quindi?
  • Re: Spring security + spring jpa + postgres

    Gli id_user nella tabella utenti e id_user nella tabella password vengono solo mappati, non c'è bisogno che generò altri ID.
    Il mio scopo è solo di leggere gli id_user è verificare che sono uguali, dopo di che fatto alcune verifiche mi deve restituire return new ApiResponse(200, "Login success", user);
    Mi puoi aiutare a correggere il codice?

    Questo è il codice corretto SHA1:
    
    package com.security.utility;
    
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Formatter;
    
    public class Hash {
    	
    	public static String encryptSha1(String password)
    	{
    	    String sha1 = "";
    	    try
    	    {
    	        MessageDigest crypt = MessageDigest.getInstance("SHA-1");
    	        crypt.reset();
    	        crypt.update(password.getBytes("UTF-8"));
    	        sha1 = byteToHex(crypt.digest());
    	    }
    	    catch(NoSuchAlgorithmException e)
    	    {
    	        e.printStackTrace();
    	    }
    	    catch(UnsupportedEncodingException e)
    	    {
    	        e.printStackTrace();
    	    }
    	    return sha1;
    	}
    
    	private static String byteToHex(final byte[] hash)
    	{
    	    Formatter formatter = new Formatter();
    	    for (byte b : hash)
    	    {
    	        formatter.format("%02x", b);
    	    }
    	    String result = formatter.toString();
    	    formatter.close();
    	    return result;
    	}
    }
    
    
    

    Invece per il metodo per il login è questo:
    
    public ApiResponse login(LoginDto loginDto) {
    
    		// search Password
    		Password password = passwordRepository.findByPassword(loginDto.getPassword());
    
    		// search Username
    		User user = userRepository.findByUsername(loginDto.getUsername());
    
    		if ((user.getId_utente() == password.getId_utente()) && password.isFl_valida() == true) {
    
    			// Decript HASH
    			String passwordHash = Hash.encryptSha1(password.getPassword());
    
    			password.setPassword(passwordHash);
    
    			// user.setPassword(password);
    		}
    
    		return new ApiResponse(200, "Login success", user);
    
    	}
    
    
    
    In questo modo in debug i valori li vedo, però resta il fatto che non entra nell'if, non capisco il perchè...visto che gli id sono uguali.

    User(id_utente=1488, username=, cognome=Mixxxx, nome=Marco, email=)

    Password(id_utente=1488, id_password=7176, password=551f6dbfa5d63b1051f135faad41cd19e1118bd, fl_valida=true)


    Quando verifico in postman:

    POST:
    http://localhost:8080/users/logi

    {
    "username":"",
    "password":"551f6dbfa5d63b1051f135faad41cd19e1118bd"
    }

    Non vedo che mi restituisce la Response.
    In ApiResponse deve restiruire il json nome, cogmome,ecc..come puoi vedere dal codice

    Puoi verificare se ho fatto bene?
  • Re: Spring security + spring jpa + postgres

    imparareJava ha scritto:


    Gli id_user nella tabella utenti e id_user nella tabella password vengono solo mappati, non c'è bisogno che generò altri ID.
    Se sono "fissi" cioè hai già popolato tu il DB con certi id noti, allora ok!

    imparareJava ha scritto:


    Questo è il codice corretto SHA1:
    No.

    Questo (e ti mostro anche lo unit test!):
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class HashUtils {
        private HashUtils() {}
    
        public static String encodeSHA1Hex(String input) {
            if (input == null) {
                return null;
            }
    
            try {
                MessageDigest md = MessageDigest.getInstance("SHA");
                byte[] digest = md.digest(input.getBytes("UTF-8"));
                return bytesToHex(digest);
            } catch (NoSuchAlgorithmException e) {
                throw new Error("Grave, algoritmo SHA non supportato");
            } catch (UnsupportedEncodingException e) {
                throw new Error("Grave, codifica UTF-8 non supportato");
            }
        }
    
        private static String bytesToHex(byte[] bytes) {
            StringBuilder buf = new StringBuilder(bytes.length*2);
    
            for (byte b : bytes) {
                buf.append(String.format("%02X", b));
            }
    
            return buf.toString();
        }
    }
    import static org.junit.Assert.assertEquals;
    import static org.junit.Assert.assertNull;
    
    import org.junit.Test;
    
    public class HashUtilsTest {
        @Test
        public void testSHA1WithNullInput() {
            assertNull("Output should be null", HashUtils.encodeSHA1Hex(null));
        }
    
        @Test
        public void testSHA1WithEmptyString() {
            assertEquals("DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", HashUtils.encodeSHA1Hex(""));
        }
    
        @Test
        public void testSHA1WithHelloString() {
            assertEquals("AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D", HashUtils.encodeSHA1Hex("hello"));
        }
    }
    (questi hex li ho generati con un tool online, proprio per verifica della implementazione)
  • Re: Spring security + spring jpa + postgres

    La tua modifica in Hash è stato fatto.

    Però ancora non capisco il perchè non mi entra in if è mi decripta l'hash e poi mi resituisce ApiResponse.
    
    public ApiResponse login(LoginDto loginDto) {
    
    		// search Password
    		Password password = passwordRepository.findByPassword(loginDto.getPassword());
    
    		// search Username
    		User user = userRepository.findByUsername(loginDto.getUsername());
    		
    		Integer userId = user.getId_utente();
    		Integer passwordId = password.getId_utente();
    
    		if (userId == passwordId ) {
    
    			// Decript HASH
    			String passwordHash = Hash.encodeSHA1Hex(password.getPassword());
    
    			password.setPassword(passwordHash);
    
    			// user.setPassword(password);
    		}
    
    		return new ApiResponse(200, "Login success", user);
    
    	}
    
    	}
    
    
    
    Ho notato in debug:
    user.getId_utente() == password.getId_utente() --> false

    Non capisco gli ID sono gli stessi: 1488

    Come mai? gli ID sono uguali.


    Invece provando in questo modo, non mi restituisce nessun tipo di errore:
    
    public ApiResponse login(LoginDto loginDto) {
    
    		// search Password
    		Password password = passwordRepository.findByPassword(loginDto.getPassword());
    
    		// search Username
    		User user = userRepository.findByUsername(loginDto.getUsername());
    		
    		Integer userId = user.getId_utente();
    		Integer passwordId = password.getId_utente();
    
    		if (password.isFl_valida() == true ) {
    
    			// Decript HASH
    			String passwordHash = Hash.encodeSHA1Hex(password.getPassword());
    
    			//New Hash
    			ApiResponse apiResponse = new ApiResponse();
    			apiResponse.setNewHash(passwordHash);
    			newHashApiResponse = apiResponse.getNewHash();
    			
    		}
    
    		return new ApiResponse(200, "Login success", newHashApiResponse, user);
    
    	}
    
    
    Restituisce 200 ok.
    Ma non mi restituisce la risposta.
  • Re: Spring security + spring jpa + postgres

    imparareJava ha scritto:


    		Integer userId = user.getId_utente();
    		Integer passwordId = password.getId_utente();
    
    		if (userId == passwordId ) {
    
    Ho notato in debug:
    user.getId_utente() == password.getId_utente() --> false

    Non capisco gli ID sono gli stessi: 1488

    Come mai? gli ID sono uguali.
    Stai confrontando due oggetti Integer!! Che possono essere due oggetti DISTINTI che magari contengono lo stesso valore numerico int. Ma essendo distinti, == dà false. Stop.
    Non cascare su queste cose ... sono le basi di Java ..

    imparareJava ha scritto:


    public ApiResponse login(LoginDto loginDto) {
    
    		// search Password
    		Password password = passwordRepository.findByPassword(loginDto.getPassword());
    
    		// search Username
    		User user = userRepository.findByUsername(loginDto.getUsername());
    		
    		Integer userId = user.getId_utente();
    		Integer passwordId = password.getId_utente();
    
    		if (userId == passwordId ) {
        .......
    
    L'approccio non è comunque appropriato. Hai definito una associazione one-to-one. Usala. Se "tiri sù" lo User con findByUsername, se c'è il record nell'altra tabella che corrisponde di id, hai anche l'oggetto Password.
    Il campo l'hai messo con fetch LAZY, lazy è un "suggerimento", non è mandatorio, quindi bisognerebbe vedere se lo tratta proprio come lazy o se siccome è one-to-one (cioè una relazione semplice) lo carica eagerly.

    Ma comunque non c'è da fare questioni. Il service è @Transactional, quindi dentro il login() puoi usare il getPassword() di User. Quindi, in sostanza:

    - tiri sù lo User con findByUsername. Se non c'è --> errore
    - prendi dallo User l'oggetto Password. Se null --> errore (discrepanza sugli id)
    - calcoli l'hash in hex della password in input (quella dalla request nel body).
    - confronti le due stringhe hex dei hash. Se non uguali --> errore (password errata)
    altrimenti ok
  • Re: Spring security + spring jpa + postgres

    Per le relazioni 1 a 1 purtroppo mi restituisce errore che dice manca la colonna id_utente.
    Ma essendo le mie tabelle è composto nel seguente modo:

    Password:

    id_utente
    id_password
    password

    Utenti:

    id_utente
    username
    nome
    cognome
    email

    la relazione 1 a 1 non mi funziona che in pratica ho fatto nel seguente modo:

    Passowrd:
    
    package com.security.model;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "password")
    public class Password {
    
    	@Id
    	@Column(name = "id_utente")
        private Integer id_utente;
    	
    	
    	@Column(name = "id_password")
        private Integer id_password;
    	
    	@Column(name = "password")
    	private String password;
    	
    	@Column(name = "fl_valida")
    	private boolean fl_valida;
    
    	
    	@OneToOne(mappedBy = "password")
    	private User user;
    
    	
    
    }
    
    
    
    Utenti:
    
    package com.security.model;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    @Table(name = "utenti")
    public class User {
    	
    	@Id
    	@Column(name = "id_utente")
        private Integer id_utente;
    	
    	@Column(name = "username")
    	private String username;
    	
    	@Column(name = "cognome")
    	private String cognome;
    	
    	@Column(name = "nome")
    	private String nome;
    	
    	@Column(name = "email")
    	private String email;
    	
    	
    	
    	@OneToOne(cascade = CascadeType.ALL)
    	@JoinColumn(name = "id_password")
        private Password password;
    	
    	
    
    }
    
    //Ho provato a mettere anche id_utenti ma quando avvio eclipse mi da sempre errore sulle relazioni
    
    
    Ho provato ad inserire anche id_utenti impostando @Id ma quando avvio eclipse mi da sempre errore sulle relazioni
    Non capisco il perchè la relazione non va...

    Per la parte Controller ho fatto questa modifica:
    
    @Autowired
    	private LoginService userService;
    
    	//Login Username and Password
    	@PostMapping("/login")
    	public ResponseEntity<ApiResponse> login(@RequestBody LoginDto loginDto) {
    		
    		ApiResponse apiResponse = userService.login(loginDto);
    		
    		return new ResponseEntity<ApiResponse>(apiResponse, HttpStatus.OK);
    	}
    
    
    Per la parte Service ho fatto questa modifica:
    
    public ApiResponse login(LoginDto loginDto) {
    
    		ApiResponse apiResponse = new ApiResponse();
    
    		// search Password
    		Password password = passwordRepository.findByPassword(loginDto.getPassword());
    
    		// search Username
    		User user = userRepository.findByUsername(loginDto.getUsername());
    
    		if ((String.valueOf(password.getId_utente()).equals(String.valueOf(user.getId_utente()))) && password.isFl_valida() == true) {
    
    			// Decript HASH
    			String passwordHash = Hash.encodeSHA1Hex(loginDto.getPassword());
    
    			// New Hash
    			apiResponse.setNewHash(passwordHash);
    			newHashApiResponse = apiResponse.getNewHash();
    
    		}
    
    		return apiResponse;
    	}
    
    
    
    Inoltre ho fatto un altra modifica per Integer, le condizioni sono true
    
    public ApiResponse login(LoginDto loginDto) {
    
    		ApiResponse apiResponse = new ApiResponse();
    
    		// search Password
    		Password password = passwordRepository.findByPassword(loginDto.getPassword());
    
    		// search Username
    		User user = userRepository.findByUsername(loginDto.getUsername());
    
    		if (password.getId_utente().intValue() == user.getId_utente().intValue() && password.isFl_valida() == true) {
    
    			// Decript HASH
    			String passwordHash = Hash.encodeSHA1Hex(loginDto.getPassword());
    
    			// New Hash
    			apiResponse.setNewHash(passwordHash);
    			newHashApiResponse = apiResponse.getNewHash();
    
    		}
    
    		return apiResponse;
    	}
    
    
    
    Lo stesso non restituisce la Risposta.

    Non riesco...con il codice mi devi aiutare a scrivere....ho problemi!!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte