Help - Search - Member List - Calendar
Full Version: [jsp] Redirection
OpenSpace > Zone Ordinateurs > Programmation
Ryle
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
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).
Wizmaster
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>
<% } %>

Ryle
Je vais essayer .
Merci.
Ryle
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
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
Ryle
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
Ben utilise Struts smile.gif
Ryle
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.
Wizmaster
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 ?
Gfx
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)
Ryle
Oui de toutes façons je ne fais pas comme ça finalement (le code sous peu une fois que je l'ai "purifié").
Wizmaster
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 ? ^^
Ryle
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 !
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2024 Invision Power Services, Inc.