Bonsoir à tous,
En réalité,faire un select dans la table user depuis la base de données "MYSQL" n'est pas du tout convenable puisque je l'ai fait et ça marche.Le grand problème je me suis rendu compte que n'importe quelle utilisateur tant qu'il existe dans la table "User" peut avoir accès à l'application(donc même n'ayant pas de privilèges sur la base de données choisie). Par exemple j'ai 2 base de données et chacune avec un utilisateur différent mais quand je fais "select * from user where User = "Utilisateur" and Password = Password "12345" " ça me retourne un utilisateur que j'ai créé pour une base de données autre que celle sur laquelle je travaille et selon mon contrôle dès que je trouve un utilisateur je redirige vers la page d'accueil.
Ben,voilà mon souci actuel : Je voulais un moyen me permettant de récupérer les informations saisies depuis le formulaire de connexion dans ma class chargée de fournir la connexion afin de les utiliser lors du chargement du "driver" et de l'établissement de la connexion ensuite je vérifie si la connexion est "null" alors pas d'accès à l'application sinon redirection vers la page d'accueil.
Voilà ce que j'ai fais mais y a un un problème dans la class chargée de fournir la connexion :
Code de la Servlet :
Code de la Factory(classe chargée de fournir la connexion)
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
48
49
50
51
52
53 package TPServlet; import static CoucheMetier.ValidationFormUtilitaire.getValeurSaisie; import java.io.IOException; import javax.servlet.ServletContext; 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 CoucheMetier.UtilisateurMetier; import DAO.DAOFactoryMysql; import DAO.UtilisateurDao; import LesObjets.Utilisateur; @WebServlet("/index") public class index extends HttpServlet { private static final long serialVersionUID = 1L; private static final String utiliCons = "NomUti"; private static final String passCons = "Password"; private static final String indexCons = "/WEB-INF/Index.jsp"; private static final String accueilCons = "/WEB-INF/MonMenu.jsp"; private static final String utilisateurCons = "utili"; private static final String passwordCons = "pass"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.getServletContext().getRequestDispatcher(indexCons).forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext application = getServletContext(); String utili = getValeurSaisie(request,utiliCons); String pass = getValeurSaisie(request,passCons); application.setAttribute(utilisateurCons, utili);//Je stocke le nom d'utilisateur dans un attribut de portée application application.setAttribute(passwordCons, pass);//Je stocke le mot de passe de l'utilisateur dans un attribut de portée application if(pass != null && utili != null){ this.getServletContext().getRequestDispatcher(accueilCons).forward(request, response); }else{ this.getServletContext().getRequestDispatcher(indexCons).forward(request, response); } } }
Code de la configuration de la factory(classe chargée de fournir la connexion) :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 package DAO; import static CoucheMetier.ValidationFormUtilitaire.getValeurSaisie; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import DAOException.DAOExceptionConfig; import LesObjets.Utilisateur; import com.jolbox.bonecp.BoneCP; import com.jolbox.bonecp.BoneCPConfig; public class DAOFactory { private static final String info = "/DAO/InfoConnexion"; private static final String URL = "url"; private static final String USER = "user"; private static final String MOTDEPASSE = "password"; private static final String DRIVER = "driver"; private static final String motDePasse = "pass"; private static final String utilisateur = "utili"; BoneCP connextionbonne = null; DAOFactory(BoneCP connect){ this.connextionbonne = connect; } public static DAOFactory getInstance(ServletContext application) throws DAOExceptionConfig{ String motDepasse = (String) application.getAttribute(motDePasse);/*Récupération du mot de passe que j'ai placé dans un attribut de portée application dans la Servlet*/ String uti = (String) application.getAttribute(utilisateur);/*Récupération du nom de l'utilisateur que j'ai placé dans un attribut de portée application dans la Servlet*/ System.out.println(motDepasse + uti);/*Cet affichage m'affiche "null null" donc j'ai pu comprendre que je n'arrive pas à récupérer les identifiants dans la classe chargée de fournir la connexion afin de les utiliser*/ Properties proprieteInfoConnextion = new Properties(); BoneCP connextionbonne = null; String url; String user; String motdepasse; String driver; ClassLoader ouvertureInfoConnexion = Thread.currentThread().getContextClassLoader(); InputStream monFichier = ouvertureInfoConnexion.getResourceAsStream(info); if(monFichier == null){ throw new DAOExceptionConfig("Le fichier est introuvable."); } try{ proprieteInfoConnextion.load(monFichier); url = proprieteInfoConnextion.getProperty(URL); user = proprieteInfoConnextion.getProperty(USER); motdepasse = proprieteInfoConnextion.getProperty(MOTDEPASSE); driver = proprieteInfoConnextion.getProperty(DRIVER); }catch(FileNotFoundException f){ throw new DAOExceptionConfig("Le fichier properties" + info + "est introuvable",f); }catch(IOException i){ throw new DAOExceptionConfig("impossible de charger le driver.",i); } try{ Class.forName(driver); }catch(ClassNotFoundException c){ throw new DAOExceptionConfig("Le driver est introuvable.",c); } try{ BoneCPConfig configurationConnextion = new BoneCPConfig(); configurationConnextion.setJdbcUrl(url); configurationConnextion.setUsername(user);/*j'aimerais mettre le nom de l'utilisateur récupéré depuis le formulaire de connexion au lieu de celui qui se trouve dans le fichier*/ configurationConnextion.setPassword(motdepasse);/*j'aimerais mettre le mot de passe récupéré depuis le formulaire de connexion au lieu de celui qui se trouve dans le fichier*/ configurationConnextion.setMaxConnectionsPerPartition(10); configurationConnextion.setMinConnectionsPerPartition(5); configurationConnextion.setPartitionCount(2); connextionbonne = new BoneCP(configurationConnextion); }catch(SQLException s){ throw new DAOExceptionConfig("Le driver est introuvable."); } DAOFactory instance = new DAOFactory(connextionbonne); return instance; } Connection getConnection() throws SQLException{ return connextionbonne.getConnection(); } public EtudiantDao getEtudiantDao(){ return new EtudiantDaoImpl(this); } public MatiereDao getMatiereDao(){ return new MatiereDaoImpl(this); } public dateDao getDateDao(){ return new DateDaoImpl(this); } public NoteDao getNoteDao(){ return new NoteDaoImpl(this); } }
Avec ce code la page de connexion s'affiche bien mais dès que j'utilise "le mot de passe et le nom de l'utilisateur récupérés" depuis le formulaire de connexion elle ne s'affiche plus et j'ai l'erreur suivante dans le navigateur:
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 package DAOFactoryConfiguration; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServletRequest; import DAO.DAOFactory; public class FactoryConfig implements ServletContextListener{ private static final String daoFactoryCons = "daoFactory"; private DAOFactory daoFactory; @Override public void contextInitialized(ServletContextEvent Configuration) { ServletContext servletContext = Configuration.getServletContext(); this.daoFactory = DAOFactory.getInstance(servletContext); servletContext.setAttribute( daoFactoryCons,this.daoFactory ); } @Override public void contextDestroyed(ServletContextEvent Configuration) { // TODO Auto-generated method stub } }
et j'ai ça dans la console :
Merci d'avance!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 GRAVE: Exception lors de l'envoi de l'évènement contexte initialisé (context initialized) à l'instance de classe d'écoute (listener) DAOFactoryConfiguration.FactoryConfig DAOException.DAOExceptionConfig: Le driver est introuvable. at DAO.DAOFactory.getInstance(DAOFactory.java:84) at DAOFactoryConfiguration.FactoryConfig.contextInitialized(FactoryConfig.java:18)
Partager