Authentification par Session J2EE, STRUTS
Résolu/Fermé
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
-
26 mai 2009 à 10:02
toni - 19 févr. 2011 à 09:31
toni - 19 févr. 2011 à 09:31
A voir également:
- Authentification par Session J2EE, STRUTS
- Double authentification google - Guide
- Authentification transcash ✓ - Forum Consommation & Internet
- Application d'authentification facebook - Guide
- Www.yahoomail.com ouverture de session ✓ - Forum Yahoo mail
- Veuillez ouvrir une session avec les privilèges du gestionnaire ✓ - Forum Jeux vidéo
2 réponses
siskozed
Messages postés
69
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
2 septembre 2009
86
28 mai 2009 à 19:15
28 mai 2009 à 19:15
Alors pour vous qui voulez faire pareil, je prend le temps de poster la solution, :
Créer une base de données, une table users avec des champs qui conviennent (login, password, firstName etc.)
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstName` varchar(50) NOT NULL,
`lastName` varchar(50) NOT NULL,
`login` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`date` datetime NOT NULL,
`isAdmin` varchar(2) NOT NULL DEFAULT '0',
`sups` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
on part du principe que vous avez deja créé un formulaire d'inscription. Sinon, insérez simplement un nouvel utilisateur avec un login et un mot de passe.
Faire une action form bean (LoginForm), une java classe (Login) et une struts action (Login)
Ensuite, dans struts-config,il faut bien modifier la ligne qui s'est créé pour que le programme fasse ce qu'on veut. Pour moi c'est ca :
<action input="/" name="LoginForm" path="/Login" scope="session" type="my.package.actions.Login">
<forward name="success" path="/index.jsp"/>
<forward name="FAILED" path="/index.jsp"/>
</action>
Donc la méthode a appeller a partir du formulaire d'authentification est /login : Voici le code de ce fameux formulaire (très simple) :
<%@taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<html:form action="/Login" method="POST" >
Login: <html:text property="login" size="10"/>
Password: <html:password property="password" size="10"/>
<html:submit value="S'identifier"/>
</html:form>
Ensuite il faut implémenter l'actionForm Bean LoginForm et la java classe Login :
Pour se faire on éfface les attributs déjà presents (c'est à dire name et number) avec les getters et les setters, on ajoute par exemple un private String login; et un private String password; et grace à la combinaison tout simplement géniale ALT + INSER De netbeans, vous selectionnez generez les getters et les setters de login et de password.
public class Login {
private String login;
private String password;
/**
* @return the login
*/
public String getLogin() {
return login;
}
/**
* @param login the login to set
*/
public void setLogin(String login) {
this.login = login;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
}
Faire pareil dans les 2 fichier LoginForm et Login
Modifier la fonction validate() dans l'actionForm Bean en mettant par exemple getLogin a la place de getName
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (getLogin() == null || getLogin().length() < 1) {
errors.add("login", new ActionMessage("error.login.required"));
// TODO: add 'error.name.required' key to your resources
}
if (getPassword() == null || getPassword().length() < 1) {
errors.add("passwordEmpty", new ActionMessage("error.password.required"));
}
return errors;
}
Ensuite Il faut faire le traitement = l'action.
Dire quel encodage on utilise :
déclarer des variables login et password et leur affecter la valeur recu grace au formulaire
créer et initialiser la session.
créer l'url de connexion a la base de données
créer un object de connexion Connection
charger le driver qui convient
se connecter a la base de données
créer un statement (un statement sert en gros a faire une requete sur la base de données)
on créé un resultset (un resultset va stoquer les valeurs récupérées
on récupert ensuite les données (un resultset se place à la colonne 0 dans les résultats, donc si next(); ca veut dire qu'il y a quelque chose dans le resultset, donc que la combinaison login/password fonctionne.
Ensuite si ca fonctionne on créer des variables de sessions, sinon on supprimer la session par session.invalidate()
puis on est redirigé grace a ce que renvoit le programme (au struts-config)
response.setContentType("text/html;charset=UTF-8");
String thisLogin = request.getParameter("login");
String thisPassword = request.getParameter("password");
HttpSession session = request.getSession();
String url = "jdbc:mysql://localhost:3306/mabasededonnees?user=nomdutilisateur&password=motdepasse";
Connection connect = null;
try{
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection(url);
/*
* On cree un statement SQL ...
*/
Statement aStmt = null;
aStmt = connect.createStatement();
/*
* ... Pour executer une requete :
* On veut savoir si le mot de passe password pour l'utilisateur Login
* est correct.
*/
ResultSet aRSet = null;
aRSet = aStmt.executeQuery("SELECT * FROM `users` WHERE `login` = '" + thisLogin + "' and `password` = '" + thisPassword + "'");
/*
* Si le resultat est no rows selected ...
* On retourne au client un refus.
*/
String firstName = null;
String lastName = null;
int id = 0;
int sups = 0;
if (aRSet.next()) {
id = aRSet.getInt(1); // on recupere la 2eme colonne : firstName
firstName = aRSet.getString(2); // on recupere la 2eme colonne : firstName
lastName = aRSet.getString(3); // on recupere la 3eme colonne : lastName
thisLogin = aRSet.getString(4); // on recupere la 4eme colonne : login
sups = aRSet.getInt(9); // on recupere la 4eme colonne : login
session.setAttribute("login", thisLogin);
session.setAttribute("sups", sups);
session.setAttribute("myID", id);
session.setAttribute("firstName", firstName);
session.setAttribute("lastName", lastName);
}else{
session.invalidate();
}
}catch(Exception e)
{
return mapping.findForward("FAILED");
}
return mapping.findForward(SUCCESS);
}
Ensuite, pour tester si la session existe, il faut entrer ca dans votre JSP:
<% String loginSession = (String)session.getAttribute("login"); %>
<% if(loginSession != null){ %>
Bienvenue <%= session.getAttribute("firstName") %> !
<% }else{ %>
Bonjour visiteur, merci de vous identifier grace a ce formulaire...
<% } %>
Et voili, voilà, voilou !
Créer une base de données, une table users avec des champs qui conviennent (login, password, firstName etc.)
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstName` varchar(50) NOT NULL,
`lastName` varchar(50) NOT NULL,
`login` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`date` datetime NOT NULL,
`isAdmin` varchar(2) NOT NULL DEFAULT '0',
`sups` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
on part du principe que vous avez deja créé un formulaire d'inscription. Sinon, insérez simplement un nouvel utilisateur avec un login et un mot de passe.
Faire une action form bean (LoginForm), une java classe (Login) et une struts action (Login)
Ensuite, dans struts-config,il faut bien modifier la ligne qui s'est créé pour que le programme fasse ce qu'on veut. Pour moi c'est ca :
<action input="/" name="LoginForm" path="/Login" scope="session" type="my.package.actions.Login">
<forward name="success" path="/index.jsp"/>
<forward name="FAILED" path="/index.jsp"/>
</action>
Donc la méthode a appeller a partir du formulaire d'authentification est /login : Voici le code de ce fameux formulaire (très simple) :
<%@taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<html:form action="/Login" method="POST" >
Login: <html:text property="login" size="10"/>
Password: <html:password property="password" size="10"/>
<html:submit value="S'identifier"/>
</html:form>
Ensuite il faut implémenter l'actionForm Bean LoginForm et la java classe Login :
Pour se faire on éfface les attributs déjà presents (c'est à dire name et number) avec les getters et les setters, on ajoute par exemple un private String login; et un private String password; et grace à la combinaison tout simplement géniale ALT + INSER De netbeans, vous selectionnez generez les getters et les setters de login et de password.
public class Login {
private String login;
private String password;
/**
* @return the login
*/
public String getLogin() {
return login;
}
/**
* @param login the login to set
*/
public void setLogin(String login) {
this.login = login;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
}
Faire pareil dans les 2 fichier LoginForm et Login
Modifier la fonction validate() dans l'actionForm Bean en mettant par exemple getLogin a la place de getName
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (getLogin() == null || getLogin().length() < 1) {
errors.add("login", new ActionMessage("error.login.required"));
// TODO: add 'error.name.required' key to your resources
}
if (getPassword() == null || getPassword().length() < 1) {
errors.add("passwordEmpty", new ActionMessage("error.password.required"));
}
return errors;
}
Ensuite Il faut faire le traitement = l'action.
Dire quel encodage on utilise :
déclarer des variables login et password et leur affecter la valeur recu grace au formulaire
créer et initialiser la session.
créer l'url de connexion a la base de données
créer un object de connexion Connection
charger le driver qui convient
se connecter a la base de données
créer un statement (un statement sert en gros a faire une requete sur la base de données)
on créé un resultset (un resultset va stoquer les valeurs récupérées
on récupert ensuite les données (un resultset se place à la colonne 0 dans les résultats, donc si next(); ca veut dire qu'il y a quelque chose dans le resultset, donc que la combinaison login/password fonctionne.
Ensuite si ca fonctionne on créer des variables de sessions, sinon on supprimer la session par session.invalidate()
puis on est redirigé grace a ce que renvoit le programme (au struts-config)
response.setContentType("text/html;charset=UTF-8");
String thisLogin = request.getParameter("login");
String thisPassword = request.getParameter("password");
HttpSession session = request.getSession();
String url = "jdbc:mysql://localhost:3306/mabasededonnees?user=nomdutilisateur&password=motdepasse";
Connection connect = null;
try{
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection(url);
/*
* On cree un statement SQL ...
*/
Statement aStmt = null;
aStmt = connect.createStatement();
/*
* ... Pour executer une requete :
* On veut savoir si le mot de passe password pour l'utilisateur Login
* est correct.
*/
ResultSet aRSet = null;
aRSet = aStmt.executeQuery("SELECT * FROM `users` WHERE `login` = '" + thisLogin + "' and `password` = '" + thisPassword + "'");
/*
* Si le resultat est no rows selected ...
* On retourne au client un refus.
*/
String firstName = null;
String lastName = null;
int id = 0;
int sups = 0;
if (aRSet.next()) {
id = aRSet.getInt(1); // on recupere la 2eme colonne : firstName
firstName = aRSet.getString(2); // on recupere la 2eme colonne : firstName
lastName = aRSet.getString(3); // on recupere la 3eme colonne : lastName
thisLogin = aRSet.getString(4); // on recupere la 4eme colonne : login
sups = aRSet.getInt(9); // on recupere la 4eme colonne : login
session.setAttribute("login", thisLogin);
session.setAttribute("sups", sups);
session.setAttribute("myID", id);
session.setAttribute("firstName", firstName);
session.setAttribute("lastName", lastName);
}else{
session.invalidate();
}
}catch(Exception e)
{
return mapping.findForward("FAILED");
}
return mapping.findForward(SUCCESS);
}
Ensuite, pour tester si la session existe, il faut entrer ca dans votre JSP:
<% String loginSession = (String)session.getAttribute("login"); %>
<% if(loginSession != null){ %>
Bienvenue <%= session.getAttribute("firstName") %> !
<% }else{ %>
Bonjour visiteur, merci de vous identifier grace a ce formulaire...
<% } %>
Et voili, voilà, voilou !
Je suggère de mettre en oeuvre le service JAAS de sécurité disponible dans serveur j2ee . Voici un tutoriel de sécurisation application struts avec JAAS : http://objis.com/tutoriel-securite-declarative-jee-avec-jaas/