IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topicStart Poll

En ligne · [ Standard ] · Linéaire+

> [jsp] Redirection, Le code s'exĂ©cute toujours

Ryle
post 14/01/2005 15:58
Message #1


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



J'inclus dans mes pages JSP une autre page JSP qui vérifie si la
personne connectée a droit d'accès à la page . Si l'accès est
interdit, la personne doit être redirigée vers une autre page.
Le problème, c'est que la détection de l'autorisation se fait bien mais que
malgré la redirection (faite avec
pageContext.forward("../JSP/errors/404error.jsp") et donc l'affichage
de cette page d'erreur), la suite du code s'exécute dans ma page (en
fait l'inclusion se fait bien, on sait que la page est refusée mais la
page s'en fout et continue malgré la redirection, à exécuter son travail).
Quelqu'un a une soluce (j'ai essayé avec
response.sendRedirect("../JSP/errors/404error.jsp") mais lĂ  il ne
redirige mĂŞme pas) ?
De plus, je n'envoie rien au browser (vérifié avec le code Java généré par Tomcat)...
Quelqu'un a t il ce problème sur lequel Google ne m'aide pas beaucoup.
J'ai regardé là :
http://www.jguru.com/faq/view.jsp?EID=376
Mais aucune des solutions n'a fonctionné .
Merci beaucoup amis codeurs.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 17/01/2005 16:43
Message #2


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



J'ai changé de stratégie, mais regardez Pluto :
user posted image

Euh, regardez plutĂ´t :

Après moultes recherches google et sur ce forum, je n'ai rien trouvé qui corresponde à mon problème.
Je souhaite faire un filtre (ou une servlet je sais pas trop) qui vérifie, pour une JSP à laquelle je tente d'accéder, si l'utilisateur peut y accéder (par des droits fixés sur les pages définis dans la base, bref pas d'importance dans mon pb, ça je sais faire) et si l'utilisateur n'a pas le droit, le redirige vers une page d'erreur.
Mon pb : comment je redirige : avec un requesdispatcher?
J'ai essayé : systématiquement, la page n'est pas trouvée.
avec un sendredirect ?
J'ai essayé : boucle infinie (ben oui, je demande la JSP qui est contrôlée par la servlet, qui me renvoie vers la JSP qui est contrôlée par la Servlet qui me renvoie vers la JSP qui est contrôlée par la Servlet qui me renvoie vers la JSP et ainsi de suite).

Quelle solution adopter (je n'utilise pas de Struts ou de trucs dans le genre) ? Merci bcp car là je désespère (deux jours que je suis dessus).

Ce message a été modifié par Ryle - 17/01/2005 16:46.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Wizmaster
post 17/01/2005 18:56
Message #3


Gobelin
**

Groupe : Membres
Messages : 65
Inscrit le : 14/01/2004 10:23
Lieu : Toulouse
Membre no. 255



Je sais pas si ça peut t'aider mais dans une JSP je fais les redirection comme ça :

CODE
<%
/* check for login */
if (user.getLogin()==null) { %>
    <jsp:forward page="login.jsp">
     <jsp:param name="backpage" value="<%=request.getServletPath()%>"/>
      </jsp:forward>
<% } %>



--------------------
Hum ? Non...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 18/01/2005 8:56
Message #4


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



Je vais essayer .
Merci.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 18/01/2005 10:15
Message #5


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



Ca ne fonctionne pas (en fait le code du reste de la page continue à s'exécuter).
Ma nouvelle idée :
Récupérer le code généré de la JSP et l'écrire dans le navigateur (en récupérant le Printer de la réponse).
Mon problème : comment récupérer ce code (exemple: je veux le code associé à la page machin.jsp , comment récupére-je cette page interprétée?) ?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Wizmaster
post 18/01/2005 12:12
Message #6


Gobelin
**

Groupe : Membres
Messages : 65
Inscrit le : 14/01/2004 10:23
Lieu : Toulouse
Membre no. 255



Ca marche pas ? Ha bon ben tant pis alors.

Pour la récuperation du code généré par les jsp, les fichiers .java et .class sont dans le sous-repertoire "work/Catalina" dans l'arborescence de Tomcat


--------------------
Hum ? Non...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 18/01/2005 13:23
Message #7


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



Oui je sais où ils sont mais ce qui m'intéresserait, ce serait de récupérer le fichier class à partir d'un nom de JSP donné.

Cependant, je te remercie de ta contribution.

Je me suis orienté vers un autre système qui m'a l'air de bien fonctionner.
Une fois le truc finalisé, je poste ma solution ici.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 18/01/2005 14:00
Message #8


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



Ben utilise Struts smile.gif


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 18/01/2005 15:12
Message #9


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



Oui c'est ce que je me suis aussi dit mais le projet est lancé sans et pas le temps de m'y former (je pars en formation 3 jours pour ça), faut que le projet avance.

Ce message a été modifié par Ryle - 18/01/2005 15:13.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Wizmaster
post 18/01/2005 17:17
Message #10


Gobelin
**

Groupe : Membres
Messages : 65
Inscrit le : 14/01/2004 10:23
Lieu : Toulouse
Membre no. 255



QUOTE(Ryle @ 18/01/2005 13:23)
Oui je sais où ils sont mais ce qui m'intéresserait, ce serait de récupérer le fichier class à partir d'un nom de JSP donné.
*


Bah euh... j'ai pas du comprendre ce que tu cherchais alors smile.gif

Moi mon jsp qui s'appelle welcome.jsp, je trouve le reste dans C:\Program Files\Web\Tomcat 5.5\work\Catalina\localhost\heros\org\apache\jsp\pages\welcome_jsp.java et C:\Program Files\Web\Tomcat 5.5\work\Catalina\localhost\heros\org\apache\jsp\pages\welcome_jsp.class

C'était pas ça ?


--------------------
Hum ? Non...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Gfx
post 19/01/2005 0:11
Message #11


Goule
****

Groupe : Membres
Messages : 980
Inscrit le : 01/08/2002 23:00
Lieu : Lyon
Membre no. 106



Ouais enfin c'est très laid parce que ça dépend du serveur JSP, surtout que rien ne le force à garder le .class en cache sur le disque smile.gif)


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 19/01/2005 8:38
Message #12


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



Oui de toutes façons je ne fais pas comme ça finalement (le code sous peu une fois que je l'ai "purifié").
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Wizmaster
post 19/01/2005 11:03
Message #13


Gobelin
**

Groupe : Membres
Messages : 65
Inscrit le : 14/01/2004 10:23
Lieu : Toulouse
Membre no. 255



QUOTE(Gfx @ 19/01/2005 00:11)
Ouais enfin c'est très laid parce que ça dépend du serveur JSP, surtout que rien ne le force à garder le .class en cache sur le disque smile.gif)
*


Voui c'est vrai, mais il peut le garder un petit moment quand mĂŞme non ? ^^


--------------------
Hum ? Non...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Ryle
post 19/01/2005 14:57
Message #14


Elfe
****

Groupe : Membres
Messages : 2,282
Inscrit le : 16/05/2002 23:00
Lieu : .gif
Membre no. 10



Voici le code promis:

Fichier web.xml :
CODE
<filter>
<filter-name>
FiltrePage
</filter-name>
<filter-class>
monpackage.MonFiltre
</filter-class>
</filter>

<filter-mapping>
<filter-name>
FiltrePage
</filter-name>
<url-pattern>
*.jsp
</url-pattern>
</filter-mapping>



Classe MonFiltre :
CODE
package MonPackage;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import javax.servlet.RequestDispatcher;
import tools.InsaContexte;
import tools.InsaConstantes;

import org.apache.log4j.Logger;


public class MonFiltreimplements Filter {
 FilterConfig fc;
 public void doFilter(ServletRequest req,
                      ServletResponse res,
                      FilterChain chain)
                      throws IOException,
                             ServletException {
     
     HttpServletRequest request = (HttpServletRequest) req;
     HttpServletResponse response = (HttpServletResponse) res;
     HttpSession session = request.getSession();
     
       String adresserelative = request.getRequestURI().substring(request.getContextPath().length());
                     String nomPage = this.retrievePageFromAdresse(adresserelative);
                 String racine = this.retrieveRootFromAdresse(adresserelative);
                     if(nomPage.equals("")){
                         nomPage=contexteappli.getParameter("page d'index par dĂ©faut");
                         adresserelative = contexteappli.getParameter("page d'index par dĂ©faut");
                     }
                     // On vĂ©rifie que le profil peut accĂ©der Ă  la page
                     if(<<personne connectĂ©e pas autorisĂ© Ă  accĂ©der Ă  adresserelative>>){
                         
                         RequestDispatcher rd = request.getRequestDispatcher(racine + usercontext.get("page d'erreur par dĂ©faut"));
                         rd.forward(request, response);
                         return;
                     } else {
                         RequestDispatcher rd = request.getRequestDispatcher(nomPage);
                         rd.forward(request, response);
                         return;
                     }
             }
         }
     }
 }
 
 private String retrievePageFromAdresse(String p_adresse){
     return p_adresse.substring(p_adresse.lastIndexOf("/") + 1);
 }
 
 private String retrieveRootFromAdresse(String p_adresse){
     String resultat = "";
     int nb_slashes = 0;
     int first_slash=p_adresse.indexOf("/");
     int cpt;
     while(first_slash != -1){
         first_slash = p_adresse.indexOf("/",first_slash+1);
         nb_slashes++;
     }
     for(cpt=0;cpt<nb_slashes-1;cpt++){
         resultat += "../";
     }
     return resultat;
 }
 
 public void init(FilterConfig filterConfig) {
   this.fc = filterConfig;
 }
 public void destroy() {
   this.fc = null;
 }
}


Voilà. J'ai souffert mais ça marche !

Ce message a été modifié par Ryle - 19/01/2005 14:58.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicTopic OptionsStart new topic
2 utilisateur(s) sur ce sujet (2 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :
 

Version bas débit Nous sommes le : : 09/05/2024 13:23