IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

[Struts]Redirection globale en cas de perte de session [FAQ]


Sujet :

Struts 1 Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut [Struts]Redirection globale en cas de perte de session
    Bonjour,

    Je cherche a rediriger vers une page d'acceuil lors d'une perte de session avec Struts, y'a-t-il un moyen autre que de tester dans toutes les pages JSP ou les ActionStruts si la session existe ? Genre quelques lignes a ajouter dans web.xml ou struts-config.xml ?

    Peut-on par exemple utiliser les Exception Globales de struts-config ? Etant donnée que la plupart du temps une perte de session se traduit par une Exception null ?

    Merci par avance de vos reponse !



    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Normalement ton serveur doit te ramener un numéro d'erreur lorsqu'il y a perte de session (501 je crois).

    Dans ton web.xml écris la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <error-page>  
        <error-code>501</error-code> 
        <location>/pages/erreurs/erreur.jsp</location>
    </error-page>
    et crée ta jsp d'erreur. voila !

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Pour detecter la perte de session; il faut implementer un listener sur la session: HttpSessionListener..
    tu peux le faire en redefinissant la classe RequestProcessor de Struts.
    regarde la

  4. #4
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Excuse moi j'ai oublié des choses importantes ! :

    1) tu dois absolument placer la balise <error-code></error-code> de ton web.xml après la balise <welcome-file-list></welcome-file-list> et avant la balise <taglib></taglib>

    2) Si tu tombe sur la page IE "Impossible d'afficher la page", c'est que IE force l'affichage de sa propre page d'erreur. Tu dois faire :
    - outils/Options INternet
    - onglet Avancé
    - dans la partie Navigation, décocher la case "Afficher des messages d'erreur HTTP simplifiés"


    Voila. Bon code !

  5. #5
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Tu as une autre solution plus propre et plus simple,

    Tu implémentes un Filter.

    tu le définis comme ca dans ton web.xml :
    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
     
    <filter>
    	<filter-name>SessionFilter</filter-name>
    	<display-name>SessionFilter</display-name>
    	<filter-class>com.package.monappli.filter.SessionFilter</filter-class>
    	<init-param>
    		<param-name>session_page</param-name>
    		<param-value>/noSession.jsp</param-value>
    	</init-param>
    </filter>
     
    <filter-mapping>
    	<filter-name>ArpegeFilter</filter-name>
    	<url-pattern>*.do</url-pattern>
    </filter-mapping>
    Et ta classe se présente comme ca :

    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 com.package.monappli.filter;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
     
    public class SessionFilter implements Filter {
     
       private static final String CLASS_NAME = SessionFilter.class.getName();
     
       private FilterConfig filterConfig = null;
       private String attribute = null;
     
       public void init(FilterConfig filterConfig) throws ServletException {
     
          this.filterConfig = filterConfig;
          this.attribute = filterConfig.getInitParameter("attribute");
     
       }
     
       /**
       * @see javax.servlet.Filter#void ()
       */
       public void destroy() {
     
       }
     
       /**
       * @see javax.servlet.Filter#void (javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
       */
       public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
     
     
          // userid in session
          boolean authorized = false;
     
          if (request instanceof HttpServletRequest) {
             HttpSession session = ((HttpServletRequest) request).getSession(false);
             // -- récup le user dans la session
    	 // retourne authorized = true; si présent
          }
     
          if (authorized) {
             chain.doFilter(request, response);
             return;
          } else if (filterConfig != null) {
             String host = request.getServerName();
             String session_page = filterConfig.getInitParameter("session_page");
     
             if (session_page != null && !"".equals(session_page)) {
                filterConfig.getServletContext().getRequestDispatcher(session_page).forward(request, response);
                return;
             }
          }
          throw new ServletException("Unauthorized access, unable to forward to login page");
       }
     
    }
    Comme ca il test ta session a chaque fois qu'il passe dans une action (la méthode doFilter est appelé par defaut).

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Element inconnu
    Bonjour,

    Il me met Element inconnu sur <filter> et <filter-mapping> dans web.xml.

    Ai-je oublié quelque chose ?

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Autant pour moi
    Re,

    J'ai ete trop rapide, apres sauvegarde de web.xml c'est bon !

    Merci beaucoup pour vos reponses !!!

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Exception
    Re,

    Au lancement du serveur ( je suis sous WSAD avec serveur Websphere ) j'ai l'exception suivante

    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
    com.ibm.ws.exception.ConfigurationWarning: Open failure
    	at java.lang.Throwable.<init>(Throwable.java)
    	at java.lang.Throwable.<init>(Throwable.java)
    	at com.ibm.ws.exception.WsException.<init>(WsException.java:106)
    	at com.ibm.ws.exception.ConfigurationWarning.<init>(ConfigurationWarning.java:22)
    	at com.ibm.ws.runtime.component.DeployedModuleImpl.initialize(DeployedModuleImpl.java:297)
    	at com.ibm.ws.runtime.component.DeployedApplicationImpl.initializeModule(DeployedApplicationImpl.java:765)
    	at com.ibm.ws.runtime.component.DeployedApplicationImpl.initialize(DeployedApplicationImpl.java:427)
    	at com.ibm.ws.runtime.component.ApplicationMgrImpl.initializeApplication(ApplicationMgrImpl.java:161)
    	at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:228)
    	at com.ibm.ws.runtime.component.ContainerImpl.startComponents(ContainerImpl.java:536)
    	at com.ibm.ws.runtime.component.ContainerImpl.start(ContainerImpl.java:413)
    	at com.ibm.ws.runtime.component.ApplicationServerImpl.start(ApplicationServerImpl.java:152)
    	at com.ibm.ws.runtime.component.ContainerImpl.startComponents(ContainerImpl.java:536)
    	at com.ibm.ws.runtime.component.ContainerImpl.start(ContainerImpl.java:413)
    	at com.ibm.ws.runtime.component.ServerImpl.start(ServerImpl.java:243)
    	at com.ibm.ws.runtime.WsServer.start(WsServer.java:128)
    	at com.ibm.ws.runtime.WsServer.main(WsServer.java:225)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
    	at java.lang.reflect.Method.invoke(Method.java:391)
    	at com.ibm.ws.bootstrap.WSLauncher.main(WSLauncher.java:189)
    	at com.ibm.etools.websphere.tools.runner.api.ServerRunnerV5$1.run(ServerRunnerV5.java:92)
    Caused by: com.ibm.etools.archive.exception.ArchiveWrappedException
    Trace de pile de l'exception imbriquée :
    com.ibm.etools.archive.exception.DeploymentDescriptorLoadException: WEB-INF/web.xml
    Trace de pile de l'exception imbriquée :
    com.ibm.etools.j2ee.exception.WrappedRuntimeException: IWAE0099E Une exception E-S s'est produite lors de l'analyse du fichier xml : ligne # : 6, Colonne # : 13.
    Trace de pile de l'exception imbriquée :
    org.xml.sax.SAXParseException: Le type d'élément "filter" doit être déclaré.
    Ou dois-je declarer filter ?

    Merci par avance de vos reponses !

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Petite precision
    Re,

    Dans le fichier web.xml j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"                         "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    Or http://java.sun.com/j2ee/dtds/web-app_2_2.dtd ne contient pas "filter", est-ce normal ?

    Apres verification filter se trouve dans http://java.sun.com/dtd/web-app_2_3.dtd

    Si je change cette ligne cela va-t-il poser probleme ?

    Merci

  10. #10
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Es-tu en J2EE niveau 1.2 ou niveau 1.3?

    C'est peut etre à cause de ca. Maintenant je ne connais pas les effets de bord d'utiliser cette dtd si tu es en 1.2.

    Toujours est-il que je me sert de cette DTD et je n'ai aucun problème.

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Mauvaise version
    Re,

    Arch je suis en 1.2 c'est pour cela, sinon je pense faire une classe Action mere pour lequel mes classe fils heriteront, et je ferai le test de session dans celle-ci.

    Merci encore pour vos reponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ Struts ] redirection dans une action
    Par jakouz dans le forum Struts 1
    Réponses: 5
    Dernier message: 28/04/2006, 15h54
  2. STRUTS redirect
    Par breizhde dans le forum Struts 1
    Réponses: 4
    Dernier message: 24/04/2006, 18h38
  3. [Struts]Redirection avec paramètre
    Par klereth dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/06/2005, 10h56
  4. [STRUTS] Redirection vers un contrôleur
    Par noah42 dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/02/2005, 09h23
  5. [JNDI] Problème en cas de perte de connexion
    Par Marc_P dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 19/10/2004, 14h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo