Bonsoir à tous.

J'ai un petit problème, en effet j'ai une application struts dans laquel j'aimerais mettre un filtre associé à toutes mes actions pour me signaler lorsque la session de l'utilisateur en cours s'est terminée.
Si la session est nul alors mon filtre redirige vers une page jsp d'erreur en proposant à l'utilisateur de revenir sur la page d'accueil.

Je fait donc un filtre assez simple, j'utilise 2 methode assez assez similaire pour faire la redirection mais les deux ne marchent pas.

solution1 avec le sendRedirect pour faire la redirection.

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
 
 
package org.stirm2.miniProjet.actions;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.stirm2.miniProjet.helpers.ServletHelper;
 
public class FiltreSession implements Filter {
 
	public void destroy() {
 
	}
 
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
	throws IOException, ServletException {
		/**
                 * Ce filtre est associé à toutes les action struts du projet (*.do)
                 * son but est de rediriger vers une page d'erreur lorsque la session
                 * de l'utilisateur expire.
                 */
 
		/**
                 * cast qui va permettre d'utiliser, de manipuler les objet HttpServletRequest et
                 * HttpServletResponse comme si nous etions dans une servlet.
                 */
		HttpServletRequest req = (HttpServletRequest)request ;
		HttpServletResponse resp = (HttpServletResponse)response ;
 
		/**
                 * Permet de récuperer la session en cours
                 */
		HttpSession session = req.getSession() ;     
 
		/**
                 * lorsque la session dans l'une des actions saura expiré alors 
                 * ce code permettra au systeme d'afficher un message d'erreur           
                 * et proposer a l'utilisateur de revenir sur la page d'accueil.
                 */
		if (session == null) {
			resp.sendRedirect("/erreurSession.jsp") ;    
		}
	}
 
	public void init(FilterConfig fc) throws ServletException {
		ServletContext context = fc.getServletContext() ;
		/**
                 * Permettra juste si le filtre a fonctionné d'afficher un message
                 * dans le fichier log de notre web Application.
                 */
		context.log("bonjour") ;
	}
 
}
2 eme solution.

je creer tout d'abord une classe a part que j'appelle ServletHelper.

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
 
package org.stirm2.miniProjet.helpers ;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletHelper {
 
	/**
         * Méthode helper permettant de rediriger une requête vers une ressource passée en 
         * paramètre. 
         * @param url l'url de la ressource
         * @param req la requête
         * @param resp la réponse
         * @throws ServletException
         * @throws IOException
         */
	public static void redirection(String url, HttpServletRequest req, HttpServletResponse resp) 
	throws ServletException, IOException {
		ServletContext application = req.getSession().getServletContext() ;
		RequestDispatcher rd = application.getRequestDispatcher(url) ;
		rd.forward(req, resp) ;
	}
}
Et ensuite dans mon filtre.

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
 
package org.stirm2.miniProjet.actions;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.stirm2.miniProjet.helpers.ServletHelper;
 
public class FiltreSession implements Filter {
 
	public void destroy() {
 
	}
 
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
	throws IOException, ServletException {
		/**
                 * Ce filtre est associé à toutes les action struts du projet (*.do)
                 * son but est de rediriger vers une page d'erreur lorsque la session
                 * de l'utilisateur expire.
                 */
 
		/**
                 * cast qui va permettre d'utiliser, de manipuler les objet HttpServletRequest et
                 * HttpServletResponse comme si nous etions dans une servlet.
                 */
		HttpServletRequest req = (HttpServletRequest)request ;
		HttpServletResponse resp = (HttpServletResponse)response ;
 
		/**
                 * Permet de récuperer la session en cours
                 */
		HttpSession session = req.getSession() ;     
 
		/**
                 * lorsque la session dans l'une des actions saura expiré alors 
                 * ce code permettra au systeme d'afficher un message d'erreur           
                 * et proposer a l'utilisateur de revenir sur la page d'accueil.
                 */
		if (session == null) {
			//resp.sendRedirect("/erreurSession.jsp") ;    
			ServletHelper.redirection("/erreurSession.jsp", req, resp) ;
		}
	}
 
	public void init(FilterConfig fc) throws ServletException {
		ServletContext context = fc.getServletContext() ;
		/**
                 * Permettra juste si le filtre a fonctionné d'afficher un message
                 * dans le fichier log de notre web Application.
                 */
		context.log("bonjour") ;
	}
 
}
web.xml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
<filter>
		<filter-name>filtre-sess</filter-name>
		<filter-class>org.stirm2.miniProjet.actions.FiltreSession</filter-class>
	</filter>
 
	<filter-mapping>
		<filter-name>filtre-sess</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
Pour tester je mets par exemple un time Out a 3 minute.
Lorsque je lance ma premiere action, j'ai directement une page blanche dans les 2 cas.
Peut etre que des le depart il voit un objet session comme étant nul et peut etre qu'ensuite il bloque au niveau de la redirection.

Normalement les 2 types de redirection devrait bien marcher (elle marchait bien quand je travaillais sur les servlets).

Donc voila je ne sais trop, si quelqu'un voit un probleme ce serait sympa qu'il puisse m'aider. Merci d'avance

Cordialement.