[jsp] Redirection, Le code s'exécute toujours
Bienvenue invité ( Connexion | Inscription )
[jsp] Redirection, Le code s'exécute toujours
Ryle |
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. |
Ryle |
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 :
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. |
Wizmaster |
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...
|
Ryle |
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. |
Ryle |
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?) ? |
Wizmaster |
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...
|
Ryle |
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. |
Gfx |
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
-------------------- |
Ryle |
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. |
Wizmaster |
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 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...
|
Gfx |
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 )
-------------------- |
Ryle |
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é").
|
Wizmaster |
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 ) Voui c'est vrai, mais il peut le garder un petit moment quand même non ? ^^ -------------------- Hum ? Non...
|
Ryle |
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. |
Version bas débit | Nous sommes le : : 09/05/2024 16:13 |