diff --git a/WebContent/index.jsp b/WebContent/index.jsp index b3239ef..43082ea 100644 --- a/WebContent/index.jsp +++ b/WebContent/index.jsp @@ -1,12 +1,46 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> - -Insert title here + +Login + + - - + + +

Login

+ <% + String messaggio = (String) request.getAttribute("messaggio"); + if (messaggio != null) { + %> +

<%=messaggio%>

+ <% + } + %> +
+
Nickname
+
+
Password
+
+ + +
+
+

Registrazione

+
+
Nickname
+ +
Password
+ +
Conferma password
+ +
+
\ No newline at end of file diff --git a/WebContent/nav.jsp b/WebContent/nav.jsp index 1b2af96..033eae0 100644 --- a/WebContent/nav.jsp +++ b/WebContent/nav.jsp @@ -6,17 +6,17 @@ Nav @@ -28,5 +28,10 @@ +
+ +
\ No newline at end of file diff --git a/src/dao/UtenteDao.java b/src/dao/UtenteDao.java index 79b3ffb..34436f6 100644 --- a/src/dao/UtenteDao.java +++ b/src/dao/UtenteDao.java @@ -1,30 +1,32 @@ package dao; - import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; import bean.Utente; public class UtenteDao implements UtenteDaoI { - + OracleConnection c = new OracleConnection(); @Override public boolean registrazione(String nickname, String password, String ruolo) { Connection connection = c.open(); - - boolean ok = false; - + + int n = -1; + String query = "insert into utenti values(?, ?, ?)"; - + try { PreparedStatement st = connection.prepareStatement(query); st.setString(1, nickname); + st.setString(2, password); + st.setString(3, ruolo); -// n = st.executeUpdate(); + n = st.executeUpdate(); // } catch (SQLException e) { e.printStackTrace(); @@ -32,16 +34,39 @@ public class UtenteDao implements UtenteDaoI { } c.close(); -// return n == -1 ? false : true; - - c.close(); - return ok; + return n == -1 ? false : true; + } @Override public Utente login(String nickname, String password) { - // TODO Auto-generated method stub - return null; + Utente letto = 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; } } diff --git a/src/filtri/FiltroLogin.java b/src/filtri/FiltroLogin.java new file mode 100644 index 0000000..a67baa8 --- /dev/null +++ b/src/filtri/FiltroLogin.java @@ -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 + } + +} \ No newline at end of file diff --git a/src/service/UtenteService.java b/src/service/UtenteService.java new file mode 100644 index 0000000..a70c93b --- /dev/null +++ b/src/service/UtenteService.java @@ -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(); + } + +} \ No newline at end of file diff --git a/src/servlet/UtenteServlet.java b/src/servlet/UtenteServlet.java new file mode 100644 index 0000000..6e0306b --- /dev/null +++ b/src/servlet/UtenteServlet.java @@ -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"); + } + + } + +} \ No newline at end of file