Ciao AndBin
Sto riguardando il codice e ho messo qualche System.out.println per seguire il codice del metodo.
Ho visto un paio di cose strane e vorrei chiederti un chiarimento.
Riporto il codice del metodo.
@RequestMapping(method = RequestMethod.POST)
public String getLoginPost(@ModelAttribute("userform") Anadip anadip,Model model,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// recupero i valori inseriti nel model
//logica per verificare la password criptata
/*
1) faccio la lettura dell'utente con la user id inserita.
se trovato il record sul database
2) Faccio controllo con passwordEncoder.matches passando come parametri
- il primo è la password in chiaro inserita dall'utente
- il secondo è la password criptata salvata nel database
Se il matches ti dà true, l'utente è autenticato.
*/
try
{
Anadip record = null;
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
if (anadip.getUserid() != null && anadip.getPassword() != null) {
record = anadipService.SelByUsername(anadip.getUserid());
if(record == null) {
request.setAttribute("message", "UTENTE inesistente. Reinserire le Credenziali");
request.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(request, response);
response.setStatus(401); // imposto il codice di errori trovati
System.out.println("-------GetLoginPost -- per userid: " + anadip.getUserid() + " impostato la response: " + response.getStatus());
return "login";
}
else
{
System.out.println("-------GetLoginPost -- eseguita lettura con userid: " + anadip.getUserid());
if (passwordEncoder.matches(anadip.getPassword(), record.getPassword())) {
// utente verificato con userid e password
System.out.println("-------GetLoginPost -- utente verificato -------- userid: " + anadip.getUserid() + " password : " + anadip.getPassword());
return "redirect:/";
} else {
// utente non verificato
return "redirect:/login/form?logout";
}
}
}
String[] test = request.getParameterValues("logout");
if (test != null)
{
Cookie cookieWithSlash = new Cookie("JSESSIONID", null);
//Tomcat adds extra slash at the end of context path (e.g. "/foo/")
cookieWithSlash.setPath(request.getContextPath() + "/");
cookieWithSlash.setMaxAge(0);
Cookie cookieWithoutSlash = new Cookie("JSESSIONID", null);
//JBoss doesn't add extra slash at the end of context path (e.g. "/foo")
cookieWithoutSlash.setPath(request.getContextPath());
cookieWithoutSlash.setMaxAge(0);
//Remove cookies on logout so that invalidSessionURL (session timeout) is not displayed on proper logout event
response.addCookie(cookieWithSlash); //For cookie added by Tomcat
response.addCookie(cookieWithoutSlash); //For cookie added by JBoss
if (test.length == 2)
{
logger.info("utente: " + test[1]);
persistentTokenRepository.removeUserTokens(test[1]);
}
}
return "redirect:/login/form?logout";
} catch (Exception e) {
throw new ServletException("getLoginPost - errore in esecuzione metodo", e);
}
}
Imposto delle credenziali inesistenti per vedere il comportamento del codice.
ti riporto anche la trace della console
Hibernate:
select
anadip0_.Matricola as Matricol1_0_,
anadip0_.Cognome as Cognome2_0_,
anadip0_.DataOperation as DataOper3_0_,
anadip0_.KeyUtentiOperation as KeyUtent4_0_,
anadip0_.loggabile as loggabil5_0_,
anadip0_.Nome as Nome6_0_,
anadip0_.NOTEDip as NOTEDip7_0_,
anadip0_.PasswordDip as Password8_0_,
anadip0_.IdStato as IdStato10_0_,
anadip0_.Titolo as Titolo11_0_,
anadip0_.UserId as UserId9_0_,
anadip0_.UserLevel as UserLev12_0_
from
AnaDip anadip0_
where
anadip0_.UserId=?
-------GetLoginPost -- per userid: abcdefgh impostato la response: 200
corretamente non viene trovato l'utente nel Database.
In questa condizione, forzo il valore dello stato a 401
response.setStatus(401);
per indicare che ho un errore,
ma come ben vedi nella riga immediatmente sucessiva in cui con
System.out.println("-------GetLoginPost -- per userid: " + anadip.getUserid() + " impostato la response: " + response.getStatus());
traccio il percorso del codice e traccio alcune variabili, il valore dello stato di response non è 401, come ho impostato, ma bensì 200.
Puoi spiegarmi perchè ?
Il settaggio a 401 non è corretto nel formalismo che uso ?
continuando viene restituito
return "login";
che correttamente mi ripresenta la pagina di login, ma mi viene presentata non con il fprmalismo css di bootstrap, come è presentata di norma, ma nell'aspetto visualizzato nello screenshot allegato.
Riesci a capire perchè viene visualizzata in questo modo ?
Grazie
Moreno
Allegati: