Développement Web: Thread local
Bonjour
pour le besoin de mon application web (JSF/MyFaces, Tomact ) (web + service + DAO) je dois conserver les informations de l'utilisateur, et de pouvoir les exploiter plus tard (niveau DAO ou Service).
la solution, j'ai essayé de mettre en place un Thread local dans le quel je stocke le User, et je le récupére plus tard niveau DAO.
le problème quand deux utilisateurs se connectent, les informations de l’ancien sont écrasées par celle du nouveau (ce qui normale puisque mon thread local est "static" )
quelqu’un pourrait m'expliquer comment procéder pour mettre en place ce thread par session utilisateur?
ContextUtils.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public final class ContextUtils implements Serializable {
private static ThreadLocal userInfos = new ThreadLocal() {
protected Object initialValue() {
return new Context();
}
}
public static Context getContext() {
return (Context) userInfos.get();
}
public static Context initContext() {
Context context = new Context();
setContext(context);
return context;
}
} |
Context.java
Code:
1 2 3 4 5 6 7 8 9
|
public class Context implements Serializable {
private static final long serialVersionUID = 5484238902280571699L;
private UtilisateurDto user;
private List<HabilitationDto> habilitations;
// getter + setter
...
} |
authentificationBean.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
public class ConnexionBean implements ActionListener, Serializable {
public void seConnecter(ActionEvent event) {
....
UtilisateurDto userDto = utilisateurService.authentifier(login, password);
List<HabilitationDto> habils = habilitationService.chargerListHabilitationByProfil();
context.setUser(userDto);
context.setHabilitations(habils);
}
} |
Dao.java (plus tard dans l'application)
Code:
1 2 3 4
|
ContextUtils.getContext().getHabilitation();
ContextUtils.getContext().getUser();
.. |