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:
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 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()); } }
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.
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!"); }
Et dans la welcomePage.jsp :
Est-ce une bonne manière de procéder ?
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>
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.
Partager