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 :

probleme de mapping


Sujet :

Servlets/JSP Java

  1. #1
    Invité
    Invité(e)
    Par défaut probleme de mapping
    Bonjour à tous,

    dans le cadre d'un projet en reseau, je suis chargé de développer un wiki en servlet sous tomcat. Toute la partie wiki fonctionne, seul l'authentification me pose problème.
    J'ai choisit de séparer l'authentification du reste. Voici le code de mon LoginHandler.java
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    import java.io.*;
    //import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class LoginHandler extends HttpServlet 
    {
        private static final long serialVersionUID = 1L;
        protected String userbase = "database";
        protected String userbase_save = "database.back";
     
        public void doPost(HttpServletRequest req, HttpServletResponse res)
    	throws ServletException, IOException 
        {
    	res.setContentType("text/html");
    	PrintWriter out = res.getWriter();
     
    	// Get the user's account number, password
    	String account = req.getParameter("login");
    	String password = req.getParameter("pass");
    	String account_new = req.getParameter("login_new");
    	String password_new = req.getParameter("pass_new");
     
     
    	if ((account == null) && (password == null) && (subscribe(account_new, password_new, userbase)))
    	    {
    		out.println("<head><title>Compte cree</title></head>");
    		out.println("<body>Vous etes maintenant enregistre sous " + account_new + ".<br>");
    		out.println("Bon surf ;-)");
    		out.println("</body></html>");
    	    }
    	// Check the name and password for validity
    	if (!allowUser(account, password, userbase))  
    	    {
    		out.println("<head><title>Acces refusé</title></head>");
    		out.println("<body>Votre login et/ou votre mot de passe sont invalides.<br>");
    		out.println("Vous voulez peut-etre <a href=\"login.html\">reessayer.</a>");
    		out.println("</body></html>");
    	    }
    	// Valid login. Make a note in the session object.
    	HttpSession session = req.getSession();
    	session.setAttribute("logon.isDone", account);  // just a marker object
     
    	// Try redirecting the client to the page he first tried to access
    	try 
    	    {
    		String target = (String) session.getAttribute("login.target");
    		if (target != null) 
    		    {
    			res.sendRedirect(target);
    			return;
    		    }
    	    }
    	catch (Exception ignored) { }
     
    	// Couldn't redirect to the target. Redirect to the site's home page.
    	//res.sendRedirect(req.getRequestURL().toString());
    	doGet (req, res);
    	//getServletContext().getRequestDispatcher("/ProtectedResource").forward(req, res);
        }
     
        protected boolean subscribe (String account, String password, String file)
        {
    	try
    	    {
    		FileWriter fw = new FileWriter (file + ".txt", true);
    		String foo = account + ":" + password;
    		fw.write(foo);
     
    		return true;
    	    }
    	catch (IOException e)
    	    {
    		return allowUser (account, password, userbase_save);
    	    }
        }
     
     
     
        protected boolean allowUser(String account, String password, String file) 
        {
    	try
    	    {
    		BufferedReader buffer = new BufferedReader (new FileReader (file + ".txt"));
    		String line;
    		String foo = account + ":" + password;
    		while ((line = buffer.readLine ()) != null)
    		    if (line.equals(foo))
    			{ 
    			    buffer.close();
    			    return true;
    			}
    		buffer.close();
    		return false;
    	    }
     
     
    	//penser a mettre return loadFile(W_database) a la place de false en dessous
    	//                                 |
    	catch (FileNotFoundException e)
    	    {
    		return allowUser (account, password, userbase_save);
    	    }
    	catch (IOException e)
    	    {
    		return allowUser (account, password, userbase_save);
    	    }
        }
    }
    La ressource a laquelle on doit accéder si on est loggé:
    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
    32
    33
    34
    35
     
    import java.io.*;
    //import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class ProtectedResource extends HttpServlet 
    {
     
        private static final long serialVersionUID = 1L;
     
        public void doGet(HttpServletRequest req, HttpServletResponse res)
                                   throws ServletException, IOException 
        {
    	res.setContentType("text/plain");
    	PrintWriter out = res.getWriter();
     
    	// Get the session
    	HttpSession session = req.getSession();
     
    	// Does the session indicate this user already logged in?
    	Object done = session.getAttribute("logon.isDone");  // marker object
    	if (done == null) 
    	    {
    		// No logon.isDone means she hasn't logged in.
    		// Save the request URL as the true target and redirect to the login page.
    		session.setAttribute("login.target", req.getRequestURL().toString());
    		res.sendRedirect(req.getContextPath() + "/login.html");
    		return;
    	    }
     
    	// If we get here, the user has logged in and can see the goods
    	out.println("Bienvenue " + done + ". Vous etes a present loggue !");
        }
    }
    mon web.xml
    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
    32
    33
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
     
    <web-app>
     
      <servlet>
        <servlet-name>Securite</servlet-name>
        <servlet-class>LoginHandler</servlet-class>
        <servlet-class>ProtectedResource</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>Securite</servlet-name>
        <url-pattern>/Securite</url-pattern>
      </servlet-mapping>
     
      <welcome-file-list>
             <welcome-file>/login.html</welcome-file>
      </welcome-file-list>
     
      <!--  <error-page> -->
      <!--     <error-code>404</error-code> -->
      <!--     <location>/error.html</location> -->
      <!--   </error-page> -->
     
      <!--   <error-page> -->
      <!--     <error-code>java.lang.NullPointerException</error-code> -->
      <!--     <location>/error.html</location> -->
      <!--   </error-page> -->
     
    </web-app>
    et enfin ma page d'acceuil login.html
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <html>
      <head>
        <title>Login</title>
      </head>
      <body>
        <div align=center><h1>Login Page</h1></div>
        <br/><br/>
        <form action="LoginHandler" method="post">
          <table width="75%">
    	<h3><i>Deja inscrit?</i></h3>
            <tr> 
              <td width="48%">Login</td>
              <td width="52%">
                <input type="text" name="login" />
              </td>
            </tr>
            <tr> 
              <td width="48%">Mot de passe</td>
              <td width="52%">
                <input type="password" name="pass" />
              </td>
            </tr>
          </table>
          <br/>
          <br/>
          <table width="75%">
    	<h3><i>Pas encore inscrit?</i></h3>
            <tr>
              <td width="48%">Login</td>
              <td width="52%">
                <input type="text" name="login_new" />
              </td>
            </tr>
            <tr> 
              <td width="48%">Mot de passe</td>
              <td width="52%">
                <input type="password" name="pass_new" />
              </td>
            </tr>
          </table>
          <p> 
            <input type="submit" name="Submit" value="Envoyer" />
            <input type="reset" name="Reset" value="Reinitialisation" />
          </p>
        </form>
      </body>
    </html>
    Le problème est lors du clic sur le bouton "envoyer", y me dit que que la ressource loginhandler n'est pas dispo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Etat HTTP 404 - /Securite/Securite/LoginHandler
     
    type Rapport d'état
     
    message /Securite/Securite/LoginHandler
     
    description La ressource demandée (/Securite/Securite/LoginHandler) n'est pas disponible.
    via l'url http://localhost:8080/Securite/LoginHandler
    Je pense que ça doit etre un problème dans le web.xml ou login.html mais je vois pas et je tourne en rond depuis pas mal de temps

    Par ailleurs un autre problème apparait, comment faire l'appel a doGet de protectedresource.java a partir de loginhandler ? car si j'ai bien compris, ca doit suivre ce type schéma:
    login.html --> loginhandler --> authentifié/newuser --> protectedresource
    login.html --> loginhandler --> non authentifié --> message d'erreur

    c'est bien ça ?

    Merci d'avance pour vos réponses

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Salut:

    pour vous aidez donner moi le contenu de votre fichier ".component "

    qui se trouve dans nomDeVotreProjet/.settings/.component


    cordialement !!

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    sauf erreur de ma part, avec tomcat 6 sous linux, je n'ai aucun fichier .component ni de répertoire .settings a la racine de mon application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ ls -lA
    -rw-r--r-- 1 snacksou snacksou 1165 2007-12-01 19:48 login.html
    drwxr-xr-x 3 snacksou snacksou 4096 2007-11-30 15:41 WEB-INF
    $
    Merci.

    P.S: les sources originales sont dispo à cette adresse (Example 8.9 to 8.11: Form-based custom authorization). Seul problème, ils ne donnent pas le web.xml...

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/07/2006, 14h45
  2. [Hibernate] Problème de mapping ?
    Par n@n¤u dans le forum Hibernate
    Réponses: 3
    Dernier message: 13/06/2006, 08h45
  3. Problem de Map et de List
    Par Roming22 dans le forum C++
    Réponses: 5
    Dernier message: 29/05/2006, 11h29
  4. [hibernate] probleme de mapping un-vers-plusieurs
    Par Elmilouse dans le forum Hibernate
    Réponses: 2
    Dernier message: 12/04/2006, 13h37
  5. Un petit probleme de map()
    Par cryptorchild dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2005, 13h00

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