Browse Source

-- login - logout - registrazione

master
marghe 1 year ago
parent
commit
717612bc8a
6 changed files with 339 additions and 30 deletions
  1. +40
    -6
      WebContent/index.jsp
  2. +16
    -11
      WebContent/nav.jsp
  3. +38
    -13
      src/dao/UtenteDao.java
  4. +74
    -0
      src/filtri/FiltroLogin.java
  5. +62
    -0
      src/service/UtenteService.java
  6. +109
    -0
      src/servlet/UtenteServlet.java

+ 40
- 6
WebContent/index.jsp View File

@@ -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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<meta charset="UTF-8">
<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>
<body>
<jsp:include page="cerca-aggiungi.jsp"></jsp:include>
<body style="background-size: 100%">
<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>
</html>

+ 16
- 11
WebContent/nav.jsp View File

@@ -6,17 +6,17 @@
<meta charset="UTF-8">
<title>Nav</title>
<style>
.nav{
background-color: #666666;
}
.nav-link{
color: white
}
.nav-link:hover{
color: #f1f1f1;
}
.nav {
background-color: #666666;
}
.nav-link {
color: white
}
.nav-link:hover {
color: #f1f1f1;
}
</style>
</head>
<body>
@@ -28,5 +28,10 @@
<li class="nav-item"><a class="nav-link" href="elenco-ordini.jsp">Visualizza
ordini</a></li>
</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>
</html>

+ 38
- 13
src/dao/UtenteDao.java View File

@@ -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;
}

}

+ 74
- 0
src/filtri/FiltroLogin.java 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
}

}

+ 62
- 0
src/service/UtenteService.java 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();
}
}

+ 109
- 0
src/servlet/UtenteServlet.java 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");
}
}

}

Loading…
Cancel
Save