Bonjour a tous!
Voila je vous explique le probleme, j'utilise JSF, avec un serveur JBOSS.
J'ai fait un sessionTimeoutFilter avec un SessionListener.
Le probleme c'est que quand la session est detruite j'aimerai que le serveur redirige le client sur la page d'accueil.
J'ai donc:
SessionListener
et du coté du SessionTimeoutFilter :
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 public class MySessionListener implements HttpSessionListener { public MySessionListener() { } public void sessionCreated(HttpSessionEvent event) { System.out.println("Current Session created : " + event.getSession().getId() + " at " + new Date()); } public void sessionDestroyed(HttpSessionEvent event) { // get the destroying session... HttpSession session = event.getSession(); System.out.println("Current Session destroyed :" + session.getId() + " Logging out user..."); try { prepareLogoutInfoAndLogoutActiveUser(session); } catch (Exception e) { System.out.println("Error while logging out at session destroyed : " + e.getMessage()); } } /** * Clean your logout operations. */ public void prepareLogoutInfoAndLogoutActiveUser(HttpSession httpSession) { httpSession.invalidate(); } }
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 public class SessionTimeOutFilter implements Filter { private String timeoutPage = "indexerror.jsf"; public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) { HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServletResponse = (HttpServletResponse) response; // is session expire control required for this request? if (isSessionControlRequiredForThisResource(httpServletRequest)) { // is session invalid? if (isSessionInvalid(httpServletRequest)) { String timeoutUrl = httpServletRequest.getContextPath() + "/" + getTimeoutPage(); System.out .println("Session is invalid! redirecting to timeoutpage : " + timeoutUrl); httpServletResponse.sendRedirect(timeoutUrl); return; } } } filterChain.doFilter(request, response); } private boolean isSessionControlRequiredForThisResource( HttpServletRequest httpServletRequest) { String requestPath = httpServletRequest.getRequestURI(); boolean controlRequired = !StringUtils.contains(requestPath, getTimeoutPage()); return controlRequired; } private boolean isSessionInvalid(HttpServletRequest httpServletRequest) { boolean sessionInValid = false; if (httpServletRequest.getRequestedSessionId() == null || !httpServletRequest.isRequestedSessionIdValid()) sessionInValid = true; else sessionInValid = false; System.out.println("sessioninvalid = " + sessionInValid); return sessionInValid; } public void destroy() { } public String getTimeoutPage() { return timeoutPage; } public void setTimeoutPage(String timeoutPage) { this.timeoutPage = timeoutPage; } }
Il se passe la chose suivante :
10:07:50,730 INFO [STDOUT] Current Session created : CF1EF6599D415A3E33E8B85BCEA6E34E at Mon Sep 22 10:07:50 CEST 2008
J'attends que ma session expire :
10:09:38,458 INFO [STDOUT] Current Session destroyed :CF1EF6599D415A3E33E8B85BCEA6E34E Logging out user...
et quand c'est censé me rediriger sur ma page d'accueil, il ne se passe rien dans le browser du client mais coté serveur, il a recréée une session avec le meme sessionId ....
et ca ne marche pas du tout coté client :
10:10:50,715 INFO [STDOUT] Session is invalid! redirecting to timeoutpage : /monSiteWeb/indexerror.jsf
10:10:50,730 INFO [STDOUT] Current Session created : CF1EF6599D415A3E33E8B85BCEA6E34E at Mon Sep 22 10:10:50 CEST 2008
Si quelqu'un a une idée ????
J'espere avoir posté au bon endroit .
Cordialement
--
xvolte
Partager