Newsgroup: it.comp.java
Titolo: Gestire ripetuti errori digitazione password...

Salve ragazzi,
sono nuovo di java e jsf e avrei un banale quesito da
porvi...(scusatene la stupidità).
Sto realizzando una pagina di login per la mia applicazione
jsf,l'utente inserisce 3 valori,username,password e gruppo.
Se la terna è presente nel db l'accesso avviene e in una classe
sessione memorizzo username e dataLogin dell'utente.
Problema.
Voglio gestire il controllo sull'erroneità ripetuta della password. Ho
creato una funzione che se non trova la terna prova a vedere se login e
gruppo sono corretti,se sì mostra un messaggio di errore sulla
password e inizializza un contatore,che quando arriva a 3 fa scattare
l'interdizione dell'utente sul db. A parole è semplice.
Il problema è che non riesco ad ottenere ciò,perchè non riesco a
gestire l'incremento della variabile tentativo relativo ad un solo
utente,per cui un utente sbaglia 2 volte la password, arriva un nuovo
utente,la sbaglia e viene interdetto.
Ecco il codice della funzione che gestisce quanto detto...so che è
banale,(dovrei usare un while,forse), ma qualcuno può aiutarmi su come
risolvere il mio problema?
Grazie mille e scusate la banalità della questione...
nella funzione risultato="failure" rimanda alla pagina di login,
risultato="login" prosegue la navigazione.
else {
					// da studiare ....
						Statement stmt2=null;
						stmt = conn.createStatement();
						String query2 = "SELECT * FROM utente " + "WHERE username = '"
						+ loginName + "' "  + "AND nomegruppo ='" + teamName + "' ";
						rs = stmt.executeQuery(query2);
						if (rs.next()){
							System.out.println("query riuscita");
							tentativo++;
							switch(tentativo)
							{
							case 1:facesContext.addMessage(null,new
FacesMessage(FacesMessage.SEVERITY_ERROR,"Password errata","Hai ancora
2 tentativi per inserire la password."));break;
							case 2:facesContext.addMessage(null,new
FacesMessage(FacesMessage.SEVERITY_ERROR,"Password errata","Hai ancora
1 tentativo per inserire la password."));break;
							case 3:facesContext.addMessage(null,new
FacesMessage(FacesMessage.SEVERITY_ERROR,"Password errata","Hai
sbagliato 3 volte la password,utente bloccato.Contattare
l'amministratore"));Statement statm3 = conn.createStatement();
						String query3 = "UPDATE utente set INTERDETTO='"
							+ 1 + "'" + "WHERE username ='"
							+ loginName + "'" + "and nomegruppo='"
							+ teamName + "'";
							int Nrows = statm3.executeUpdate(query3);break;
							}
						}
						else
							System.out.println("query fallita");
						facesContext
						.addMessage(
								null,
								new FacesMessage(
										FacesMessage.SEVERITY_ERROR,
										"L'utente non risulta essere registrato,seguire la procedura
di registrazione",
										"Utente non registrato ."));
						risultato = "failure";
 
 
 
 
				}	
			}

 sessione memorizzo username e dataLogin dell'utente.
Potresti inserire codesto oggetto da subito in sessione.
In tale oggetto ci sarà anche un contatore che potrai checkare (e
azzerare se riesce ad autenticarsi).

dovresti mettere in sessione un oggetto che tiene traccia del numero
dei tentativi effettuati.
l'oggetto ad es. parte da 3, ogni volta che il login fallisce riprendi
l'oggetto e lo decrementi di 1
prima di fare il tentativo di login vedi se questo oggetto è maggiore
di 0 altrimenti non fai nemmeno la query.
questo se vuoi fare un controllo a livello di sessione. nel senso che
se lo stesso utente chiude e riapre il browser la prossima volta gli
sarà data la possibilità di loggarsi
se vuoi fare una cosa un po più seria secondo me devi mettere un campo
sulla tabella nel DB tipo NUMERO_TENTATIVI_RIMASTI
quando un utente vuole fare il login fai una query su :username,
password, numero di tentativi rimasti. Sul DB vedi se username e seil
num.tentativi > 0. Se tutto ok fai fare un'altra query con per vedere
se la password è corretta. Se è ok dai l'accesso, altrimenti
decrementi il num_tentativi e dai la pagina di errore.
Non è difficile poi di modi ce ne sono tanti.
ciao
pio...@inwind.it
 ha scritto:
