2010-06-30 29 views
1

J'ai une application web dynamique en Java EE avec JSF, Facelets, Richfaces. Mes pages sont toutes des pages xhtml. JSTL ne fonctionne donc pas. Pour que mes pages de compte et toutes les autres pages privées soient joignables, je veux tester si l'utilisateur s'est connecté, donc si la session d'attribut dans HttpSession n'est pas nulle. Si c'est null, l'utilisateur est redirigé dans la page d'accueil.Pages Xhtml et test HttpSession, pas de jstl?

J'ai essayé dans ma page xhtml:

<jstl:if test="${sessionScope['session']==null}"> 
<jstl redirect...> 
</jstl:if>--> 

mais ce n'est pas la page jsp cela ne fonctionnera pas. Alors, où suis-je censé tester si la session n'est pas nulle pour permettre à l'utilisateur de voir ses pages privées? dans un bean géré central?

Répondre

3

La place habituelle pour ceci est un Filter.

Créer une classe qui implementsjavax.servlet.Filter et écrire la logique suivante dans la méthode doFilter():

if (((HttpServletRequest) request).getSession().getAttribute("user") == null) { 
    // Not logged in, so redirect request to login page. 
    ((HttpServletResponse) response).sendRedirect("/login.jsf"); 
} else { 
    // Logged in, so just continue request. 
    chain.doFilter(request, response); 
} 

Plan filtre web.xml sur une url-pattern de quelque chose comme /private/*, /secured/*, /restricted/*, etc.

<filter> 
    <filter-name>loginFilter</filter-name> 
    <filter-class>com.example.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>loginFilter</filter-name> 
    <url-pattern>/private/*</url-pattern> 
</filter-mapping> 

Si vous avez les pages privées dans le dossier /private, ce filtre sera appelé et gérer la présence de l'utilisateur connecté dans la session en conséquence.

Notez que j'ai renommé le nom d'attribut session en user car cela est beaucoup plus logique. Le HttpSession lui-même est à savoir déjà la session. Il aurait été trop ambigu et déroutant pour les autres développeurs de vérifier/maintenir votre code.

+0

merci beaucoup ... nous avons proposé de le faire sur chaque page privée: mais j'ai préféré votre méthode de toute façon, facile à entretenir et plus générique, merci ... – KitAndKat