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
Bonjour,

Je débute en J2EE et je voudrais faire ca :

¤ l'utilisateur entre un mot de passe et un nom d'utilisateur dans le formulaire d'identification
¤ le formulaire envoit les parametres login et password à une classe LoginManager (servlet ??)
¤ la classe LoginManager récupert les params et vérifie dans la base que le couple login/password existe
¤ si oui création de la session, sinon affichage d'un message d'erreur...

Pouvez vous un peu m'indiquer sur la facon de faire ? s'il faut que j'utilise une servlet, comme ca s'utilise, etc... j'ai trouvé ce lien là : http://www.infres.enst.fr/~talel/cours/inf225/wwwbd/projets/servletJava.html
Sa classe ConnectionAuthenticationServlet.java me plait mais je comprend pas trop, si vous pouviez m'aider, ce serait super sympa...

MERCI D'AVANCE !!! A PLUS

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
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 !
24
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/
1