1 Gestione dell`utente connesso in sessione con Java

1
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
Controllo dell’utente connesso al sito tramite JSP, Java Beans e Servlet.
Ciò che ci proponiamo di fare è l’accesso ad un sito web con autenticazione. La
nostra applicazione web comprende 2 pagine jsp index.jsp (pagina iniziale) e
home.jsp pagina di inizio attività una volta loggati, una servlet per il
controllo dei dati di login e una bean per la gestione dei dati utente.
index.jsp (pagina con form per dati di login utente)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Applicazione</title>
Inseriamo eventuali riferimenti a file javascript e css
</head>
<body>
<p>User's Login</p>
Richiamo alla servlet (Login.java) che si occupa del controllo sui dati per la
login.
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php
2
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
<form method="get" action="<%request.getContextPath();%>Login">
o anche:
<form method="post" action="Login" name=”myForm”>
<table>
<tr>
<td>user id</td>
<td><input type="text" name="userid" value=""></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="pwd" value=""></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="entra">
<input type="reset" value="cancella"></td>
</tr>
</table>
</form>
Eventuale gestione dell’errore in caso di ritorno dalla servlet con errore. In
questo caso l’errore viene settato come attributo della sessione dalla servlet.
<% String error = (String) session.getAttribute("error");
if (error != null) { %>
Errore: <%= error %>
<% } %>
<% session.removeAttribute("error");
</body>
</html>
Servlet Login.java
Classe per la gestione della connessione al db
import it.miopacchetto.db.connection.DBConnection;
Java Bean per I dati dell’utente connesso
import it.miopacchetto.bean.UtenteConnesso;
/**
* Servlet implementation class Login
*/
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Login() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*
response)
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php
3
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
execute(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
execute(request,response);
}
protected void execute(HttpServletRequest request, HttpServletResponse response)
{
String userid = null;
String pwd = null;
Legge I dati inseriti dall’utente nella request
userid = request.getParameter("userid");
pwd = request.getParameter("pwd");
Gestione dell’errore in caso di userid o password inseriti nulli. L’utente viene
rediretto verso il form iniziale su index.jsp. L’errore viene settato come
attributo della sessione in modo da poterlo leggere in index.jsp.
if(userid == null || userid.equalsIgnoreCase("null") ||
userid.equalsIgnoreCase("")) {
request.getSession().setAttribute("error", "user id obbligatorio");
response.sendRedirect("index.jsp");
return;
}
if(pwd == null || pwd.equalsIgnoreCase("null") || pwd.equalsIgnoreCase("")) {
request.getSession().setAttribute("error", "password obbligatoria");
response.sendRedirect("index.jsp");
return;
}
Ottenniamo la connessione al db, in questo punto o in maniera più corretta
utilizzando una servlet che parta al caricamento dell’apllicazione e istanzi un
oggetto che gestisce la connessione (da java.mysql.*).
Supponiamo di avere l’oggetto connessione istanziato da un’altra servlet e
settato come attributo di contesto.
All’interno di tale servlet dovremmo avere un codice simile:
public void init() {
//ottiene la connessione al DB per tutta l'applicazione
// e la setta come attributo del contesto
DBConnection conn = new DBConnection();
conn.connect();
this.getServletContext().setAttribute("oConn", conn);
}
Connect() metodo della classe custom DBConnection conterrà il codice per
effettuare la connessione al db
String url = "jdbc:mysql://256.256.256.256/nomedb?autoreconnect=true";
String username = "";
String password = "";
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php
4
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
connection = DriverManager.getConnection(url, username, password);
Torniamo alla servlet Login… a questo punto otteniamo la connessione
DBConnection oDBconnection =
DBConnection)getServletContext().getAttribute("oConn");
Connection connessione = oDBconnection.getConnection();
try { Selezioniamo i dati utente dalla apposite tabella DB
Statement stmt = connessione.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM TABELLA_LOGIN WHERE
COD_USER = '"+userid+"' AND PWD = '"+pwd+"'");
Utilizziamo il bean UtenteConnesso per memorizzare i dati dell’utente.
if(rs.next()) {
UtenteConnesso oUserCon = new UtenteConnesso();
oUserCon.setNome(rs.getString("NOME"));
oUserCon.setCognome(rs.getString("COGNOME"));
//utente settato come attributo della sessione
request.getSession().setAttribute("utenteConnesso", oUserCon);
//setto il BEAN come attributo
request.getSession().setAttribute("oUserCon", oUserCon);
login ok quindi redirect automativo verso la home.jsp
response.sendRedirect("home.jsp");
oppure getRequestDispatcher invece della sendRedirect
request.setAttribute("oUserCon", oUserCon);
try{
request.getRequestDispatcher("/home.jsp").include(request,response);
}catch(ServletException e) {}
} else {
login fallita redirect a index.jsp
request.getSession().setAttribute("error", "login error");
response.sendRedirect("index.jsp");}
} catch (SQLException e) { out.println("errore in lettura dati");}
}
}
Home.jsp – leggiamo I dati relativi all’utente connesso dal bean
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<jsp:useBean id="oUserCon" class="it.miopacchetto.bean.UtenteConnesso"
scope="session" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Home</title>
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php
5
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
</head>
<body>
<br> Utente connesso:<br>
<jsp:getProperty name="oUserCon" property="nome" />
<jsp:getProperty name="oUserCon" property="cognome" />
…
…
Java Bean – UtenteConnesso, gestisce le info attraverso i metodi set e get
package it.miopacchetto.bean;
import java.io.Serializable;
public class UtenteConnesso implements Serializable{
private String nome;
private String cognome;
private String codUser;
public UtenteConnesso() {
super();
}
public UtenteConnesso(String nome, String cognome) {
super();
this.nome = nome;
this.cognome = cognome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
}
All’interno del file web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>webImpiegati</display-name>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php
6
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
<description>User Login</description>
<display-name>Login</display-name>
<servlet-name>Login</servlet-name>
<servlet-class>it.miopacchetto.web.servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
Inizializzatore è la servlet che ottiene la connessione al db
<servlet>
<description></description>
<display-name>Inizializzatore</display-name>
<servlet-name>Inizializzatore</servlet-name>
<servletclass>it.energent.corsojava.impiegati.web.servlet.Inizializzatore</servletclass>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Inizializzatore</servlet-name>
<url-pattern>/Inizializzatore</url-pattern>
</servlet-mapping>
</web-app>
Organizzazione vista dal project explorer di Eclipse
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php
7
Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet
Nota finale - strumenti utilizzati:
Web Server: Apache Tomcat 6
Editor: Eclispe Ganimede Version: 3.4.1
desvin at VIDESOFTWARE HOUSE ... since 1989
desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php