-- login - logout - registrazione

This commit is contained in:
marghe 2020-04-27 22:08:07 +02:00
parent 76a3d2be78
commit 717612bc8a
6 changed files with 339 additions and 30 deletions

View File

@ -1,12 +1,46 @@
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="ISO-8859-1"%> pageEncoding="UTF-8"%>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="ISO-8859-1"> <meta charset="UTF-8">
<title>Insert title here</title> <title>Login</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">
<link rel="stylesheet" href="css/stile.css">
</head> </head>
<body> <body style="background-size: 100%">
<jsp:include page="cerca-aggiungi.jsp"></jsp:include>
<h2>Login</h2>
<%
String messaggio = (String) request.getAttribute("messaggio");
if (messaggio != null) {
%>
<p><%=messaggio%></p>
<%
}
%>
<form action="utente-servlet" method="post" name="modulo">
<div>Nickname</div>
<input type="text" name="nickname" required><br>
<div>Password</div>
<input type="password" name="password" required><br>
<input type="hidden" name="azione" value="login">
<input type="submit" value="Login">
</form>
<hr>
<h2>Registrazione</h2>
<form action="utente-servlet" method="post" name="modulo">
<div>Nickname</div>
<input type="text" name="nickname" required>
<div>Password</div>
<input type="password" name="password" required>
<div>Conferma password</div>
<input type="password" name="conferma" required>
<input type="hidden" name="azione" value="registrazione"><br><input
type="submit" value="Registrati" class="bottone bottone-small">
</form>
</body> </body>
</html> </html>

View File

@ -6,17 +6,17 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Nav</title> <title>Nav</title>
<style> <style>
.nav{ .nav {
background-color: #666666; background-color: #666666;
} }
.nav-link{ .nav-link {
color: white color: white
} }
.nav-link:hover{ .nav-link:hover {
color: #f1f1f1; color: #f1f1f1;
} }
</style> </style>
</head> </head>
<body> <body>
@ -28,5 +28,10 @@
<li class="nav-item"><a class="nav-link" href="elenco-ordini.jsp">Visualizza <li class="nav-item"><a class="nav-link" href="elenco-ordini.jsp">Visualizza
ordini</a></li> ordini</a></li>
</ul> </ul>
<form action="utente-servlet" method="post" class="logout-form"
style="position: fixed; top: 2px; right: 5px">
<input type="hidden" name="azione" value="logout"> <input
type="submit" value="logout" class="nav-item">
</form>
</body> </body>
</html> </html>

View File

@ -1,8 +1,8 @@
package dao; package dao;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import bean.Utente; import bean.Utente;
@ -15,7 +15,7 @@ public class UtenteDao implements UtenteDaoI {
public boolean registrazione(String nickname, String password, String ruolo) { public boolean registrazione(String nickname, String password, String ruolo) {
Connection connection = c.open(); Connection connection = c.open();
boolean ok = false; int n = -1;
String query = "insert into utenti values(?, ?, ?)"; String query = "insert into utenti values(?, ?, ?)";
@ -23,8 +23,10 @@ public class UtenteDao implements UtenteDaoI {
PreparedStatement st = connection.prepareStatement(query); PreparedStatement st = connection.prepareStatement(query);
st.setString(1, nickname); st.setString(1, nickname);
st.setString(2, password);
st.setString(3, ruolo);
// n = st.executeUpdate(); n = st.executeUpdate();
// //
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -32,16 +34,39 @@ public class UtenteDao implements UtenteDaoI {
} }
c.close(); c.close();
// return n == -1 ? false : true; return n == -1 ? false : true;
c.close();
return ok;
} }
@Override @Override
public Utente login(String nickname, String password) { public Utente login(String nickname, String password) {
// TODO Auto-generated method stub Utente letto = null;
return null; Connection connection = c.open();
String query = "select * from utenti where nickname = ? and password = ?";
try {
PreparedStatement st = connection.prepareStatement(query);
st.setString(1, nickname);
st.setString(2, password);
ResultSet rs = st.executeQuery();
while(rs.next()) {
letto = new Utente();
letto.setNick(rs.getString(1));
letto.setPassword(rs.getString(2));
letto.setRuolo(rs.getString(3));
System.out.println(letto);
}
} catch (SQLException e) {
e.printStackTrace();
}
c.close();
return letto;
} }
} }

View File

@ -0,0 +1,74 @@
package filtri;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import bean.Utente;
/**
* Servlet Filter implementation class FiltroLogin
*/
@WebFilter(urlPatterns = { "/cerca-aggiungi.jsp", "/elenco-contatti.jsp",
"/elenco-ordini.jsp",
"/error.jsp", "/home-contatto.jsp" }) // Annotation
public class FiltroLogin implements Filter {
/**
* Default constructor.
*/
public FiltroLogin() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request1 = (HttpServletRequest) request;
HttpServletResponse response1 = (HttpServletResponse) response;
// La sessione viene creata la prima volta che viene invocato il server
// Ottengo l'oggetto sessione già esistente
HttpSession session = request1.getSession(false);
// Se la sessione non esiste, ne creo una nuova
if (session == null) {
session = request1.getSession(true);
}
// Ottengo l'attributo di sessione "utente"
Utente u = (Utente) session.getAttribute("utente");
if (u == null) { // Se l'utente non esiste, non è stata effettuata la login -> torno indietro
response1.sendRedirect("index.jsp");
} else { // Altrimenti, proseguo
chain.doFilter(request1, response1);
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,62 @@
package service;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import bean.Utente;
import dao.UtenteDao;
public class UtenteService {
public static final String SALT = "lol-123";
public static void main(String[] args) {
}
private static UtenteDao ud = new UtenteDao();
public static boolean registrazione(String nickname, String password) {
String saltedPassword = SALT + password;
String hashedPassword = generateHash(saltedPassword);
return ud.registrazione(nickname, hashedPassword, "utente");
}
public static boolean registrazione(String nickname, String password, String ruolo) {
String saltedPassword = SALT + password;
String hashedPassword = generateHash(saltedPassword);
return ud.registrazione(nickname, hashedPassword, ruolo);
}
public static Utente login(String nickname, String password) {
String saltedPassword = SALT + password;
String hashedPassword = generateHash(saltedPassword);
System.out.println("Inserita " + hashedPassword);
return ud.login(nickname, hashedPassword);
}
public static String generateHash(String input) {
StringBuilder hash = new StringBuilder();
try {
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] hashedBytes = sha.digest(input.getBytes());
char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
for (int idx = 0; idx < hashedBytes.length; ++idx) {
byte b = hashedBytes[idx];
hash.append(digits[(b & 0xf0) >> 4]);
hash.append(digits[b & 0x0f]);
}
} catch (NoSuchAlgorithmException e) {
// handle error here.
}
return hash.toString();
}
}

View File

@ -0,0 +1,109 @@
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import bean.Utente;
import service.UtenteService;
/**
* Servlet implementation class ServletUtente
*/
@WebServlet("/utente-servlet")
public class UtenteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Leggo il parametro azione
String azione = request.getParameter("azione");
// Registrazione
if (azione.equals("registrazione")) {
// Leggo i parametri nickname, nome, cognome, email, numero, password
String nickname = request.getParameter("nickname");
String password = request.getParameter("password");
// Invoco il metodo registrazione
boolean ok = UtenteService.registrazione(nickname, password, "utente");
// Se tutto ok, inviare con un messaggio di conferma la risposta a login.jsp
if (ok) {
String messaggio = "Registrazione effettuata, ora procedi con la login";
request.setAttribute("messaggio", messaggio);
request.getRequestDispatcher("index.jsp").forward(request, response);
} else { // Altrimenti, inviare con un messaggio di errore la risposta a
// registrazione.jsp
String messaggio = "Registrazione fallita, il nickname non è disponinibile, ritenta";
request.setAttribute("messaggio", messaggio);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
} else if (azione.equals("login")) { // Login
// Leggo i parametri nickname e password
String nickname = request.getParameter("nickname");
String password = request.getParameter("password");
// Chiamo il metodo login
Utente loggato = UtenteService.login(nickname, password);
// Se tutto ok, link a index.jsp
if (loggato != null) {
//Ottengo l'oggetto Session
HttpSession sessione = request.getSession(false);
//Setto come attributo di sessione l'utente e la sua lista dei preferiti vuota
if(sessione != null) {
sessione.setAttribute("utente", loggato);
}
if(loggato.getRuolo().equals("utente")) {
response.sendRedirect("cerca-aggiungi.jsp");
}else {
response.sendRedirect("elenco-ordini.jsp");
}
} else {// Altrimenti, link a login.jsp con un messaggio di errore
String messaggio = "Login fallita, ritenta";
request.setAttribute("messaggio", messaggio);
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else if(azione.equals("logout")) { //Logout
//Chiudo la sessione
HttpSession sessione = request.getSession(false);
if(sessione != null) {
sessione.invalidate();
}
//Link alla login.jsp
response.sendRedirect("index.jsp");
}
}
}