Système d'identification [ConnectionPool]
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:
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:
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:
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.