Dans l'application sur laquelle je travaille, j'ai eu un ennuyeux problème avec le Session Timeout, surtout avec IE 6 (tiens, c'est bizarre ça
)
Bref, j'ai pas trouvé grand chose en googlant la chose, alors j'ai du concocter ma propre solution fait maison que voici:
Je passe par un filtre mappé avec la Faces Servlet dont voici le code:
public class TimeoutFilter implements Filter { private static final Logger log = Logger.getLogger(TimeoutFilter.class); public void init(FilterConfig conf) throws ServletException {} public void destroy() {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest r = ((HttpServletRequest) request); if (r.getSession(false) == null) { r.getSession(); ((HttpServletResponse) response).sendRedirect(r.getContextPath()+"/timeout.html"); } else { chain.doFilter(request, response); } } }
En gros, voici ce qu fait ce filtre:
Il faut ensuite déclarer ce filtre dans web.xml et l'associer à la Faces Servlet:
<filter> <display-name>Timeout Filter</display-name> <filter-name>timeout</filter-name> <filter-class>TimeoutFilter</filter-class> </filter> <filter-mapping> <filter-name>timeout</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>
Et voilou, le tour est joué: plus d'écran moche d'exception de Tomcat lors du timeout.
<h:panelGroup rendered="#{loginCtrl.connected}">
...
Le reste de mon template
...
</h:panelGroup>
<h:panelGroup rendered="#{!loginCtrl.connected}">
Vous n'êtes pas autorisé bla bla bla
</h:panelGroup>
Vous devez être identifié pour poster un commentaire.
Ce blog tourne autour des nouvelles technologies dans le monde Java, tel que Wicket, Eclipse, JSF, Facelets, JPA, Spring, etc. mais aussi de choses moins classiques comme Scala par exemple !
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 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 |