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 :

[forward]Passage obligatoire refusé


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut [forward]Passage obligatoire refusé
    Bonjour tout le monde.

    Je suis en train de développer une appli. en MVC, et je voudrais protéger l'accès à mes JSP. Le but étant évidement d'empêcher mon utilisateur d'accéder directement à une page sans être passé avant par mon controleur.

    Pour l'instant l'appli est déployé sous Apache 5.0.12. et voici la trace qu'il ma laisse.
    Citation Envoyé par Apache 5
    java.lang.IllegalStateException: "getOutputStream()" a déjà été appelé pour cette réponse
    org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:609)
    org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:190)
    org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:165)
    org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158)
    org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:234)
    org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:160)
    org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:120)
    org.apache.jsp.displayResult_jsp._jspService(displayResult_jsp.java:93)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    Et voici le code mis en cause... (situé en toute première ligne de mon JSP)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <%    System.out.println("attribute(displayResult) "+request.getAttribute("displayResult"));
        
        if (request.getAttribute("displayResult")==null 
                || !request.getAttribute("displayResult").equals(new Boolean(true))) {
            System.out.println("Redirection");
            RequestDispatcher dispatcher = request.getRequestDispatcher("/index.html");
            dispatcher.forward(request, response);
        }else{
    %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    Et dans ma console j'affiche à la fois le null "réglementaire" quand je viens sans être passé par mon controlleur, ET le Redirection qui me prouve que je passe bien sur mon forward.
    Evidement, tout marche si je viens par le chemin normal.

    Donc si quelqu'un voit la raison de mon erreur... je suis preneur.

    Par avance, Merci.

  2. #2
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    Citation Envoyé par javadoc
    public void forward(ServletRequest request,
    ServletResponse response)
    throws ServletException,
    java.io.IOException

    Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. This method allows one servlet to do preliminary processing of a request and another resource to generate the response.

    For a RequestDispatcher obtained via getRequestDispatcher(), the ServletRequest object has its path elements and parameters adjusted to match the path of the target resource.

    forward should be called before the response has been committed to the client (before response body output has been flushed). If the response already has been committed, this method throws an IllegalStateException. Uncommitted output in the response buffer is automatically cleared before the forward.

    The request and response parameters must be either the same objects as were passed to the calling servlet's service method or be subclasses of the ServletRequestWrapper or ServletResponseWrapper classes that wrap them.

    Parameters:
    request - a ServletRequest object that represents the request the client makes of the servlet
    response - a ServletResponse object that represents the response the servlet returns to the client
    Throws:
    ServletException - if the target resource throws this exception
    java.io.IOException - if the target resource throws this exception
    java.lang.IllegalStateException - if the response was already committed
    Tu es dans une JSP, la (ou un bout de la) réponse a déjà été envoyé au client.

    Essaie avec ce code en haut de la page (Avant les includes et avant les espaces).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page autoFlush="false" %>
    Je ne suis pas sûr que ça marche mais qui ne tente rien n'a rien.

    bon courage.

  3. #3
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Citation Envoyé par yann2
    Avant les includes et avant les espaces
    J'y ai bien pensé... et dans le Java créé par Tomcat à partir de mon JSP, je n'ai même pas un petit out.print("\r\n"); avant mon forward -ou mon include car je l'ai également essayé...- et pourtant, rien n'y fait ! J'ai beau ne rien avoir écrit dans mon buffer, il est quand même, à priori, envoyé au client.

    Par contre, quand j'y réfléchis un peu plus, je me dit que si ça marchait, avec un forward, le client recevrait mon index en voyant l'URL d'une autre page. Ca ne me semble ni propre ni logique.

    Je suis donc pour l'instant avec un lien de renvoi vers l'index... Dites moi ce que vous en pensez et si vous voyez une autre façon de gérer la chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <%    if (request.getAttribute("displayResult")==null 
                || !request.getAttribute("displayResult").equals(new Boolean(true))) {
            %><A href="./index.html">Merci de vous identifier avant de venir sur cette page</A><%
        }else{
    %>

  4. #4
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Resalut

    Dans ce cas là j'utiliserai plutôt un include pour être plus évolutif.

    Sinon tu as bien essayé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page autoFlush="false" %>
    ?

    Citation Envoyé par leminipouce
    je n'ai même pas un petit out.print("\r\n");
    Oui, par contre tu dois avoir un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setContentType("text/html");
    bon courage

Discussions similaires

  1. Passage obligatoire par page d'authentification
    Par marouene_ dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 25/06/2011, 10h10
  2. Réponses: 2
    Dernier message: 27/01/2010, 08h38
  3. Passage de variable refusée (incomprehensible)
    Par tombabibel dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 21/10/2008, 13h33
  4. Champs préremplis: passage par VBA obligatoire ?
    Par icare_1er dans le forum Modélisation
    Réponses: 1
    Dernier message: 04/07/2007, 03h18
  5. [ JSP ][ Débutant ] Passage d'objet par un forward
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/04/2004, 10h33

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