Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1

    [JSP/Servlet] Aiuto su autenticazione

    ho cominciato lo studio sull'autenticazione.
    ho modificato il web.xml così:
    codice:
    <welcome-file-list>
            <welcome-file>DoSelect</welcome-file>
        </welcome-file-list>
        <security-constraint>
            <display-name>Admin</display-name>
            <web-resource-collection>
                <web-resource-name>insert</web-resource-name>
                <description/>
                <url-pattern>/DoInsert</url-pattern>
            </web-resource-collection>
        </security-constraint>
        <login-config>
            <auth-method>FORM</auth-method>
            <form-login-config>
                <form-login-page>/login.jsp</form-login-page>
                <form-error-page>/login.jsp</form-error-page>
            </form-login-config>
        </login-config>
        <security-role>
            <description/>
            <role-name>admin</role-name>
        </security-role>
    vorrei bloccare l'esecuzione della servlet DoInsert in modo da poter fare il login usando una tabella su db.
    il problema è che per ora quando clicco sul form di inserimento la query viene eseguita.
    perchè??

  2. #2
    ho aggiunto queste righe alla sezione security-constraint:
    codice:
            <auth-constraint>
                <description/>
                <role-name>admin</role-name>
            </auth-constraint>
    adesso mi blocca l'esecuzione della servlet.
    solo che nn so fare il login usando il db.
    ho creato un form che richiama questa servlet dove provo a reperire user/pass dalla tabella:
    codice:
    public class DoLogin extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String sql = "SELECT name,pass FROM utenti";
            String name = request.getParameter("txtUser".trim());
            String pass = request.getParameter("txtPass".trim());
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                conn = Connessione.getConnection();
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    rs.getString(name);
                    rs.getString(pass);
                }
                if (name.equals(request.getParameter("txtUser")) && pass.equals(request.getParameter("txtPass"))) {
                    RequestDispatcher disp = request.getRequestDispatcher("/index.jsp");
                    disp.forward(request, response);
                } else {
                    RequestDispatcher disp = request.getRequestDispatcher("/login.jsp");
                    disp.forward(request, response);
                }
    
            } catch (ClassNotFoundException ex) {
                ex.getMessage();
            } catch (SQLException ex) {
                ex.getMessage();
            } finally {
                try {
                    rs.close();
                    stmt.close();
                } catch (SQLException ex) {
                    ex.getMessage();
                }
            }
        }
    }
    ma nn succede nulla, solo pagina bianca.

  3. #3
    Non fa nulla perchè fa quello che giustamente gli dice il codice e cioè andrà sempre nell'if dove fa la forward sulla index.
    Anzi andra nell'else se nel nome o password metti uno spazio alla fine

  4. #4
    ti riferisci a trim??
    anche levandolo ottengo lo stesso risultato.
    io cmq avevo capito servisse per levare gli spazi....

    inoltre nn ci arriva nell'else in quanto sennò dovrebbe rimandarmi a loin.jsp.
    ho fatto delle prove mettendo JOptionPane sia nell'if che nell'else e nn compaiono.

    forse sparo un pò di scemenze ma secondo me l'errore è a monte.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    "txtUser".trim()

    L'uso della funzione trim in questo modo non ha senso... cosi fai un trim sulla string "txtUser" che senso ha? Tu immagino vuoi effettuare la trim sul contenuto di quella variabile giusto?

    Quindi sarà cosi:

    request.getParameter("txtUser").trim();

    p.s. Come ha già detto snakeplinsky anche l'if impostato in quel modo non ha alcun senso...

  6. #6
    Cerca di leggere il codice e capirlo, fai una query con il risultato non ci fai nulla ed eguagli la stessa cosa.
    Fai un getParameter e lo metti in una variabile name e poi eguagli name con un nuovo getParameter
    Secondo te se fai : (che poi è quello che fai)
    codice:
    if(request.getParameter("txtUser").equals(request.getParameter("txtUser")))
    cosa ti ritornerà true o false???

    Faccio così perchè è inutile che ti posto la soluzione cerca di arrivarci da solo.

  7. #7
    sul trim mi ero sbagliato io.
    altrove avevo scritto giusto.
    errore di distrazione....

    per quanto riguarda l'if hai ragione, lo eguaglio a stesso ed è inutile.
    quello che cerco di fare è di vedere se c'è una corrispondenza tra i valori scritti nella textbox e nel db.
    ho modificato un pò e almeno riesco a entrare nel secondo else se i campi sono lasciati vuoti:
    codice:
    public class DoLogin extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String name = request.getParameter("txtUser").trim();
            String pass = request.getParameter("txtPass").trim();
            String sql = "SELECT name,pass FROM utenti WHERE name='" + name + "'AND pass='" + pass + "'";
            int count = 0;
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                if (name != null && name != "" && pass != null && pass != "") {
                    conn = Connessione.getConnection();
                    stmt = conn.createStatement();
                    rs = stmt.executeQuery(sql);
                    while (rs.next()) {
                        rs.getString(name);
                        rs.getString(pass);
                        count++;
                    }
                    if (count > 0) {
                        RequestDispatcher disp = request.getRequestDispatcher("/index.jsp");
                        disp.forward(request, response);
                        JOptionPane.showMessageDialog(null, "IF");
                    } else {
                        RequestDispatcher disp = request.getRequestDispatcher("/login.jsp");
                        disp.forward(request, response);
                        JOptionPane.showMessageDialog(null, "ELSE 1");
                    }
                    rs.close();
                    stmt.close();
                } else {
                    RequestDispatcher disp = request.getRequestDispatcher("/login.jsp");
                    disp.forward(request, response);
                    JOptionPane.showMessageDialog(null, "ELSE 2");
                }
            } catch (ClassNotFoundException ex) {
                ex.getMessage();
            } catch (SQLException ex) {
                ex.getMessage();
            }
        }
    }
    nn riesco a capire come faccio a controllare se quello che invia il form ha una corrispondenza nel db.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    name.equals(rs.getString(name));
    password.equals(rs.getString(pass));

  9. #9
    E' un po contorto come lo hai fatto ma è giusto il codice che hai postato:
    Fai la query con username e pwd e se vi è una tupla sul DB il count sarà maggiore di zero e andrà su index altrimenti sempre su login.

    PS: ricordati che è una stringa quindi sarebbe meglio la query con LIKE

  10. #10
    sempre cose contorte mi escono alla fine ....

    cmq, ho modificato il ciclo while come mi è stato detto e la query così:
    codice:
    "SELECT name,pass FROM utenti WHERE name LIKE %'" + name + "'% AND pass LIKE %'" + pass + "'%"
    ma nn ottengo lo stesso nessun risultato.
    secondo nn entra proprio nell'if.
    entra solo nell'else se i campi sono vuoti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.