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

Servlets/JSP Java Discussion :

[Filtre Servlet] problème pour écriture d'un ResponseWrapper


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut [Filtre Servlet] problème pour écriture d'un ResponseWrapper
    J'ai pour le controle de l'acces aux pages de mon site creer un Filtre de Servlet, qui donc effectue quelques vérifications avant d'autiriser ou non la visite de tel ou tel page web.

    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
     
    public void doFilter(ServletRequest req, ServletResponse res,
    		FilterChain chain) throws IOException, ServletException {
    		System.out.println("Youhou");
    		HttpSession session = null;
    		try {
     
    			/*On verifie que l'user est authentifié (presence de son objet en Session)*/
    			session = haveSession((HttpServletRequest) req);
    			/*On recupère l'URI demandé*/
    			String URI = ((HttpServletRequest)req).getRequestURI();
     
    			//On teste si la variable personne qui doit être ds la session est un User ou un Admin
    			if(session.getAttribute("personne") instanceof User){
    				isUserPage(URI);
    			}
    			else if (session.getAttribute("personne") instanceof Admin) {
    				isAdminPage(URI);
    			}	
    			chain.doFilter(req,res);
    		}
    		catch (IllegalArgumentException e)
    		{
    			envoiErreur.sendLoginError((HttpServletRequest)req,(HttpServletResponse)res,EnvoiErreur.SESSION_ERROR);
    		}
    		catch (IdentificationException e)
    		{
    			envoiErreur.sendError((HttpServletRequest)req,(HttpServletResponse)res,EnvoiErreur.RESTRICT_ERROR,null);
    		}
     
    	}
    Le problème est au niveau du renvoi d'erreur que j'essayais de faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void sendError(HttpServletRequest req, HttpServletResponse res, String errorType, String optionnalText) throws IOException{
    		HttpSession s = req.getSession(true);
     
    		s.setAttribute("errorMessage",errorType);
    		s.setAttribute("option",optionnalText);
     
    		res.sendRedirect(res.encodeRedirectURL("pages/error.jsp"));
    	}
    Or il n'est pas possible de renvoyer une page directement à partir du filtre, il faut utiliser un ResponseWrapper que l'on passera dans le chain.doFilter()...

    Or j'ai beau avoir lu le tutoriel de sun dessus, je ne comprend vraiment pas comment ecrire mon responseWrapper afin qu'au final cela renvoi ma page d'erreur avec le message d'erreur.

    Quelqu'un pourrait t'il m'aider dans l'ecriture de cette classe ?

  2. #2
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Est ce qu'en levant une exception identifié cela ne peut pas faire l'affaire?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Je ne pense pas, car le filtre apparement se contente de filter et passe le relais à la suite de la chaine ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chain.doFilter(req,res);
    Et c'est la qu'il faut remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chain.doFilter(req,wrapper);
    si j'ai bien compris, le problème c'est que même avec le tutos sun :
    http://java.sun.com/products/servlet/Filters.html

    Je ne comprends pas grand chose qui me permettrait de renvoyer ma page d'erreur ...

  4. #4
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Est ce que tu ne pourrais pas positionner un indicateur dans la request indiquant à la page suivante (ou dans les couche abstraite du controleur) qu'il y a eu un problème dans au niveau du filtre et de conditionner la page suivante...?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Cela ne fonctionnera pas car il faudra que je teste en debut de doGet() et doPost() la valeur de cette variable de la sorte :
    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
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    		int action = Integer.parseInt(req.getParameter("action"));
    		if(!req.getAttribute("accessError").equals("")){
    			envoiErreur.sendError(req,res,(String)req.getAttribute("accessError"),null);
    			req.removeAttribute("accesssError");
    		}
    		
    		switch(action){
    			case 1 : { //Consultation de la liste globale des fichiers
    				List<Fichier> listFic = gestionUser.getListFichiers();
    				req.setAttribute("liste",listFic);
    				res.sendRedirect(res.encodeRedirectURL("./pages/restricted/restrictedAdmin/listeFichiers.jsp"));
    				break;
    			}
    			case 2 : {//Deconnexion
    				req.getSession(false).invalidate();
    				res.sendRedirect("./pages/index.html");
    				break;
    			}
    		}
    	}
    et a ce moment le code de la methode continuera sont execution quand même ...

  6. #6
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    Tu pourrais avoir une classe mère au dessus de ta servlet (MyAbstractServlet).
    et tu pourrais mettre ton controle à ce niveau là.
    Comme cela si il y a un problème tu ne fais pas appel à la méthode doGet ou doPost. tu fais ta redirection immédiatement..

    Je ne sais pas si j'ai été tres clair dans mes explications...

Discussions similaires

  1. Problème pour écriture dans un fichier
    Par nekcorp dans le forum Général Python
    Réponses: 6
    Dernier message: 11/04/2014, 16h53
  2. Problème pour lancer un Js dans ma Servlet
    Par Slyders dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/08/2008, 11h14
  3. [JSP] Problème pour accéder à un bean venant d'une servlet
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/06/2006, 09h43
  4. [Servlet] Probléme écriture fichier
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/05/2005, 15h17
  5. [Tomcat] Problème pour accéder à une servlet
    Par david71 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 08/04/2005, 13h56

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