Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203

    jee sessioni e login utente

    Ciao a tutti avrei bisogno di un mano per un applicativo che devo modificare.
    Sino ad oggi il mio applicativo era accessibile a chiunque all'interno dell'intranet aziendale, adesso la situazione si complica un pò, in quanto devo implementare l'inserimento di username e password all'interno dell'applicativo (si può entrare solamente con l'inserimento di username e password).
    Mi sono creato un altro progettino su tomcat (nell'applicazione in produzione viene utilizzato jboss 5.1) ed ho creato le classi java per poter effettuare il login.
    e le pagine jsp per vedere se è entrato o no.
    Il primo (di numerosi) problemi (o dubbi) che ho incontrato è questo:

    Al momento in cui vado a lanciare il login nell'url del browser viene fuori la password in chiaro in questo modo:

    http://localhost:8084/Login/LoginSer...password=pippo

    queste sono le servlet e le classi java che ho utilizzato:
    questa è la servlet per il login
    codice:
     
    package login;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import model.Autenticazione;
    
    public class LoginServlet extends HttpServlet {
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            String username, password;
            try {
                HttpSession session = request.getSession(true);
                Autenticazione autenticazione = (Autenticazione) session.getAttribute("login");
                    if(autenticazione == null) {
                        autenticazione = new Autenticazione();
                }
                username = request.getParameter("username");
                password = request.getParameter("password");
                if((username.compareTo("pippo")==0)&&(password.compareTo("pippo")==0)){
                    autenticazione.setValue(true);
                        session.setAttribute("login", autenticazione);
                            request.getRequestDispatcher("/logOK.jsp").forward(request, response);
                } else {
                    request.getRequestDispatcher("/logKO.jsp").forward(request, response);
                }
            } finally { 
                out.close();
            }
        } 
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        } 
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
        @Override
        public String getServletInfo() {
            return "Short description";
        }
    }
    Questa è la classe che modella autenticazione:
    codice:
    package model;
    public class Autenticazione {
        boolean accesso = false;
    
        public void setValue(boolean accesso){
            this.accesso = accesso;
        }
        public boolean getValue() {
            return accesso;
        }
    }
    e questo è l'index:

    codice:
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Login</title>
        </head>
        <body>
            <form action="LoginServlet" class="container">
              
    1. <label for="code">Username: </label> <input type="text" name="username" id="username" size="30" />
    2. <label for="code">Password: </label> <input type="password" name="password" id="password" size="30" />
    <input type="submit" value="Ricerca"> </p> </form> </body> </html>
    come posso evitare che nell'url si veda il valore del campo password?

    Grazie in anticipo ragazzi

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Il form dev'essere impostato con method="post". Quel che viene inviato dal form va processato di conseguenza in doPost: se hanno voluto separare quanto viene mandato in get da quanto viene mandato in post un motivo ci sarà
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    Grazie mille Andrea per l'aiuto.
    Adesso ho un altro piccolo dubbio, devo mettere tutti gli oggetti in sessione, leggendo su internet ho letto che basta semplicemente inserire nelle servlet ad esempio:
    codice:
     
    session.setAttribute("username", username);
    e riprendere i valori con una stringa del genere:
    codice:
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Login OK</title>
        </head>
        <body>
    
           <%
            String username = (String)session.getAttribute("username");
            
    %>
    
            <h1 style="color: red">COMPLIMENTI <%= username %> Hai effettuato il login</h1>
        </body>
    </html>
    è corretto formalmente?

    dopo che il login è andato a buonfine mi restiuisce una stringa del genere:
    codice:
     
    COMPLIMENTI pippo Hai effettuato il login
    Dove pippo è l'username utilizzato per effettuare il login (al momento è statico cioè impostate nella servlet ma poi sarà prelevato da un database (sicuramente un ldap dove ci sono le profilazioni di rete della mia socetà)ma non è un problema prendere i dati dal db), in questo momento l'username è prelevato dalla sessione o sbaglio? perciò basterebbe oltre che portarmi dietro l'username mi dovrei portare dietro anche gli altri oggetti o sbaglio?
    Grazie mille per l'aiuto.
    Siete tutti fantastici e sempre molto disponibili.
    Un saluto

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    La forza delle Session in java risiede proprio nel fatto che ci puoi registrare su qualsiasi oggetto, incluso un eventuale User Object con tutte le info del caso (questo per limitare, ad esempio, gli accessi al database). Qualcosa del genere:

    codice:
    User user = (User)session.getValue("auth_user");
    Dove User è la classe che modelizza un utente (ovvero quanto normalmente andrai ad estrarre dal database a seguito di un login corretto), che ovviamente andrai a registrare in sessione una volta effettuato il log in.

    codice:
    session.setAttribute("auth_user", tuo_user);
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    Perciò ho interpretato in maniera corretta le sessioni in java?
    Perciò in questo caso il nome utente stampato equivale ad un oggetto (in questo caso il nome utente ma potrebbe essere un tagliaerba o un codice numerico) messo in sessione e prelevato?
    bene adesso non mi resta che mettere tutti gli oggetti che ho in sessione ed il gioco è fatto o sbaglio?
    Ma che differenza c'è tra il mio getAttribute ed il getValue?
    Io in getAttribute lo utilizzo per passarmi gli oggetti da iterare dalla servlet alla jsp in questo modo:
    Nella servlet
    codice:
     
    Iterator i = codStatInvio.iterator();
                        request.setAttribute("code", i);
    Nella jsp
    codice:
     
    <%
                Iterator i =(Iterator)request.getAttribute("code");
                    VRicercaStatoInvio codDisp = new VRicercaStatoInvio();
                        while(i.hasNext()){
                            codDisp =(VRicercaStatoInvio)i.next();
            %>
    Il modo è corretto o sbaglio?
    basta aggiungere la stringa sella sessione subito dopo aver ricevuto la list di oggetti dal db e richiamare la sessione appena prima dell'iterazione o sbaglio?
    Ma devo inserire la parte riguardante l'utente in ogni servlet ed in ogni jsp?
    Scusami se ti subisso di domande.
    Grazie mille andrea sei un grandissimo

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    scusa, refuso mio: il metodo corretto è
    codice:
    session.getAttribute
    getValue è stato deprecato.

    La differenza tra session.getAttribute e request.getAttribute risiede nella "visibilità" dei dati considerati: una cosa è quello che trovi in request, ovvero dati specifici a quella "comunicazione" tra client e server (per esempio, il momento in cui invii un form, facendone un submit), e un'altra è session, che invece è svincolata da quanto il client stia inviando al server (e la cui propagazione tra pagine è gestita in maniera totalmente invisibile dal container)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    perciò do vrei sostituire i request.setAttribute con i session.setAttribute per mettere i valori di ritorno in sessione o no?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Bisogna capire ciò di cui si parla e mi pare di aver detto che session e request non sono la stessa cosa:

    breve esempio.
    form.jsp
    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h1>Questa pagina contiene un form</h1>
            <%
            if (session.getAttribute("nome") != null || session.getAttribute("cognome") != null) {
                // sessioni inizializzate e campi valorizzati, stampiamone il contenuto
            %>
            <h2>Dati in sessione</h2>
            <pre>
              Nome: <% out.print(session.getAttribute("nome")); %>
    
              Cognome: <% out.print(session.getAttribute("cognome")); %>
            </pre>
            <%
            }
            %>
            <form name="myform" method="post" action="postform.jsp">
                Nome: <input type="text" name="nome" id="nomeField" />
    
                Cognome: <input type="text" name="cognome" id="cognomeField" />
    
                <input type="submit" value="submit" />
            </form>
        </body>
    </html>
    postform.jsp
    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>        
            <h1>Questa è la landing page del form</h1>
            <h2>Via request</h2>
            
    
    Nome: <% out.print(request.getParameter("nome")); %>
    
                Cognome: <% out.print(request.getParameter("cognome")); %>
            </p>
            <p<</p>
            <h2>In Sessione</h2>
            
    
    Nome: <% out.print(session.getAttribute("nome")); %>
    
                Cognome: <% out.print(session.getAttribute("cognome")); %>
            </p>
            
    
    </p>
            <h2>Salviamo in sessione</h2>
            <%  session.setAttribute("nome", request.getParameter("nome"));
                session.setAttribute("cognome", request.getParameter("cognome"));
            %>
            <h2>Torniamo al form</h2>
        </body>
    </html>
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    grazie mille andrea sei stato chiarissimo

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    203
    allora ho un piccolo problemino cercando di mettere i risultati della ricerca in sessione mi da diversi errori:

    Questa è la mia servlet:
    codice:
     
    protected void processRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
    
            try {
                String stringFrazionario = (String) session.setAttribute("frazionario", request.getParameter("frazionario")); 
                List frazDisp = controllerDao.findByFrazionarioDispaccio(stringFrazionario);
                    Iterator i = frazDisp.iterator();
                        request.setAttribute("frazionario", i);
                if (frazDisp  != null) {
                    request.getRequestDispatcher("/fraz_disp.jsp").forward(request, response);
                } else {
                    request.getRequestDispatcher("/error.jsp").forward(request, response);
                }
            } finally {
                out.close();
            }
        }
    
        // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /**
         * Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
    
        /**
         * Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         * @throws ServletException if a servlet-specific error occurs
         * @throws IOException if an I/O error occurs
         */
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
    Nella prima parte evidenziata cioè
    codice:
     String stringFrazionario = (String) session.setAttribute("frazionario", request.getParameter("frazionario")); 
    Mi da come errore:
    incorvertible type
    required: java.Lang.String
    Found: void

    e nei process request mi da questo errore:

    Method process request cannot be applied to gyven types (etc etc)

    Dove sbaglio?

    Grazie a tutti per l'aiuto

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.