Bonjour,

J'aimerais utiliser les cookies pour pré-renseigner le login d'un formulaire d'authentification, mais cela ne fonctionne pas comme ça devrait (pour autant que j'ai codé la chose correctement )

Voici mon bean de 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
 
@ManagedBean
@RequestScoped
public class ConnexionForm {
 
	private static final String COOKIE_USERNAME = "loginUsername";
	private static final String COOKIE_REMEMBER_ME = "loginRememberMe";
 
	public static final String PARAM_URL_ORIGINALE = "urlOriginale";
 
	private String login;
	private String password;
	private boolean remembered;
 
	@EJB
	private EmployeDao m_employeService;
 
	/**
         * Default Constructor
         */
	public ConnexionForm() {
	}
 
	@PostConstruct
	public void init() {
		Cookie cookieUsername = CookieHelper.getCookie(COOKIE_USERNAME);
		if (cookieUsername != null && cookieUsername.getMaxAge() > 0) {
			login = cookieUsername.getValue();
		}
		Cookie cookieRememberMe = CookieHelper.getCookie(COOKIE_REMEMBER_ME);
		if (cookieRememberMe != null && cookieRememberMe.getMaxAge() > 0) {
			try {
				remembered = Boolean.valueOf(cookieRememberMe.getValue());
			} catch (Exception e) {
				// On ignore l'erreur s'il n'est pas possible de retrouver un boolean
			}
		}
	}
 
	public void authenticate() throws IOException {
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext externalContext = context.getExternalContext();
 
		// Récupère l'éventuelle session active ...
		HttpSession session = ((HttpServletRequest) externalContext
				.getRequest()).getSession();
		// ... et l'éventuel employé connecté
		Employe loginBean = (Employe) session.getAttribute("user");
 
		try {
			// Si aucun employé n'est déjà authentifié, recherche en base de données
			if (loginBean == null) {
				loginBean = m_employeService.getEmploye(this.login, this.password);
			}
 
			// Si un employé est authentifié, met à jour le cookie de connexion
			// et redirige l'utilisateur sur la page demandée ou la page d'accueil
			if (loginBean != null) {
				session.setAttribute("user", loginBean);
 
				if (isRemembered()) {
					CookieHelper.setCookie(COOKIE_USERNAME, login, 60 * 60 * 24 * 365); // 1 année
					CookieHelper.setCookie(COOKIE_REMEMBER_ME, 
							Boolean.TRUE.toString(), 60 * 60 * 24 * 365); // 1 année
				} else {
					CookieHelper.setCookie(COOKIE_USERNAME, "", 0);
					CookieHelper.setCookie(COOKIE_REMEMBER_ME,
							Boolean.FALSE.toString(), 0);
				}
 
				String urlOriginale = (String) session.getAttribute(PARAM_URL_ORIGINALE);
				if (Strings.isNullOrEmpty(urlOriginale)) {
					urlOriginale = IUrlLocation.URL_ACCUEIL;
				}
 
				urlOriginale = externalContext.getRequestContextPath() + urlOriginale;
 
				externalContext.redirect(urlOriginale);
			}
 
			throw new Exception(getMessage(FacesMessage.SEVERITY_ERROR).getSummary());
		} catch (Exception e) {
	        context.addMessage(null, new FacesMessage(e.getMessage()));
	    }
	}
 
	public void forgetLoginData() {
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext externalContext = context.getExternalContext();
 
		try {
			externalContext.redirect(externalContext.getRequestContextPath()
					+ IUrlLocation.URL_OUBLI_LOGIN);
		} catch (IOException e) {
			context.addMessage(null, getMessage(FacesMessage.SEVERITY_ERROR));
		}
	}
 
	private FacesMessage getMessage(Severity severity) {
		return Messages.getMessage("NomUtilisateurOuMotDePasseInconnu", severity, null);
	}
 
	public String getLogin() {
		return login;
	}
 
	public void setLogin(String login) {
		this.login = login;
	}
 
	public String getPassword() {
		return password;
	}
 
	public void setPassword(String password) {
		this.password = password;
	}
 
	public boolean isRemembered() {
		return remembered;
	}
 
	public void setRemembered(boolean remembered) {
		this.remembered = remembered;
	}
}
J'ai une classe CookieHelper pour faire le job de gestion des cookies :
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
 
public final class CookieHelper {
 
	public static void setCookie(String name, String value, int expiry) {
		FacesContext facesContext = FacesContext.getCurrentInstance();
 
		HttpServletRequest request = (HttpServletRequest) facesContext
				.getExternalContext().getRequest();
		Cookie cookie = null;
 
		Cookie[] userCookies = request.getCookies();
		if (userCookies != null && userCookies.length > 0) {
			for (int i = 0; i < userCookies.length; i++) {
				if (userCookies[i].getName().equals(name)) {
					cookie = userCookies[i];
					break;
				}
			}
		}
 
		if (cookie != null) {
			cookie.setValue(value);
		} else {
			cookie = new Cookie(name, value);
			cookie.setPath(request.getContextPath());
		}
 
		cookie.setMaxAge(expiry);
 
		HttpServletResponse response = (HttpServletResponse) facesContext
				.getExternalContext().getResponse();
		response.addCookie(cookie);
	}
 
	public static Cookie getCookie(String name) {
		FacesContext facesContext = FacesContext.getCurrentInstance();
 
		HttpServletRequest request = (HttpServletRequest) facesContext
				.getExternalContext().getRequest();
		Cookie cookie = null;
 
		Cookie[] userCookies = request.getCookies();
		if (userCookies != null && userCookies.length > 0) {
			for (int i = 0; i < userCookies.length; i++) {
				if (userCookies[i].getName().equals(name)) {
					cookie = userCookies[i];
					return cookie;
				}
			}
		}
		return null;
	}
}
1. Dans la méthode init(), je vérifie s'il y a un cookie et qu'il a une expiration autre que -1 pour pré-renseigner ou non les champs.
2. Dans la méthode anthenticate(), je teste si l'utilisateur est valide, si oui, je mets à jour les cookies en fonction du choix de l'utilisateur de se rappeler de lui ou non.

Le problème est que dans la méthode init(), le maxAge des cookies est toujours -1, même si l'utilisateur a demandé à se rappeler de lui la fois d'avant....

Qqun a-t-il une idée de pourquoi ça ne fonctionne pas correctement ?
Merci d'avance pour votre aide