Bonjour,

J'aimerais implémenter un nouveau système d'identification en utilisant un pool de connexion.
Auparavant, on effectuait la connexion avec un user/mdp oracle PAR utilisateur.

J'ai une jsp de login qui demande "user" + "mdp" et qui envoit les données vers une servlet Ident.java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String ident = request.getParameter("ident");
		String pwd = request.getParameter("pwd");
 
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver") ;
			@SuppressWarnings("unused")
			Connection cn = (Connection)DriverManager.getConnection("jdbc:oracle:thin:@name:port:conn",ident,pwd);
			HttpSession session = request.getSession(true);
			session.setAttribute("loggedUser", ident);
			response.sendRedirect("/NewLoginMethod/Init");
 
		} catch (ClassNotFoundException e) {
			response.sendRedirect("index.jsp?erreur="+ e.getMessage());
		}catch (SQLException sqle) {
			// TODO Auto-generated catch block
			response.sendRedirect("index.jsp?erreur="+sqle.getMessage());
		}
 
	}
Si la connexion est réussie, que le mdp est correct (user/mdb oracle), on redirige l'utilisateur vers la page principale (via une servlet "Init" que voici).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
		HttpSession session = request.getSession(false);
		DataSource ds=null;
		Connection con = null;
		Statement stmt = null;
 
		if(session!=null)	
		{
		try 
		{
			String userDescr="";
			Context initContext = new InitialContext();
			ds = (DataSource) initContext.lookup("java:comp/env/jdbc/DataSource");
			con = ds.getConnection();
			stmt = con.createStatement();
 
			String sql="select description from UTILISATEUR " +
					   " where login = '" + session.getAttribute("loggedUser") + "'";
			ResultSet rs = stmt.executeQuery(sql);
			while(rs.next())
				userDescr=rs.getString(1);
 
			request.setAttribute("userDescr",userDescr);
			getServletConfig().getServletContext().
			getRequestDispatcher("/html/welcomePage.jsp").forward(request, response);
 
		} catch (NamingException e) {
			e.printStackTrace();
		}catch (SQLException sqle){
			sqle.printStackTrace(); 
		} finally
		{
			ds=null;
			try {
				stmt.close();
				con.close();
			} //Already Closed
			catch (SQLException e) {}
			stmt=null;
			con=null;
		}
		}
		else
			response.sendRedirect("index.jsp?erreur=Session expirée!");
	}
A partir de là, tous les utilisateurs qui se connectent avec succès utilisent le pool de connexion avec le user/mdp générique, commun pour tous.

Et dans la welcomePage.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>Welcome</title>
</head>
<body>
	<h1>Bienvenue <c:out value="${requestScope['userDescr']}"/>!</h1>
	<h4>Vous vous êtes identifié avec succès..</h4>
</body>
</html>
Est-ce une bonne manière de procéder ?
Si un utilisateur tape directement http://monserveur/MonContext/Init , il accèdera directement à la page de cette manière..
Comment contrôlez-vous qu'il est bien identifié ? via une variable de session?
N'y a-t-il aucun soucis lorsque X utilisateurs se connectent en même temps avec ce procédé ?

Merci d'avance.