Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [jsp] Creare cookie (o simili) in jsp

    Ciao come già detto in un preecednte post,nel quale ho chiesto aiuto per un alti problemi, devo creare un minisito di registrazione a dei corsi master, usando tecnologie prevalentememnte jsp e jstl, db (anche servlet, ma solo per il front controller); Oltre alle varie funzioni di un normale sito (registrazione, login, ecc), deve essere implementato in modo che riconosca quale utente già iscritto sia presente sul sito (dato che ogni utente deve poter visualizzare le proprie info personali, salvate in un database) naturalmente dopo essersi regolarmente loggato...con un altro progetto con le srvlet creavo semplicemente dei cookie e controllavo in ogni servlet se erano presenti o meno, ma in questo caso come si possono implementare i cookie o, appunto, dei loro simili?

    Grazie ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    ciao, non fai prima a mettere una variabile in sessione che indica che l'utente è loggato ??

    in ogni servlet controlli se la variabile di sessione esiste o è null.... se è null vuol dire che non è stata fatta la login.

    In questo modo non scrivi niente sulla macchina locale ma resta tutto nel server....

  3. #3
    Si infatti ho trovato una cosa del genere..il problema è che non ho ben capito ancora come il sito può capire quale utente sia loggato, in quanto ogni utente (caricato nel database) una volta loggato deve poter accedere solo alle proprie informazioni personali, anch'esse caricate in una tabella nel DB..inoltre deve esistere anche un utente admin che deve avere funzioni diverse...non è che potresti indicarmi degli esempi magari?perchè alcuni ne ho trovati in rete ma non sono molto esplicativi, nel senso che si limitano solo a far vedere come creare una sessione, ma non come gestirla, che è poi quello che serve a me..grazie di nuovo ciao

  4. #4
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    e' sufficiente mettere in sessione l'oggetto "utente", che al suo interno oltre a username, password conterra' anche un ruolo (o una collection di ruoli).

    quindi avrai, per esempio:
    codice:
    public class Utente {
    
    private String username;
    private String password;
    private String ruolo; //per semplicita' di esempio! Probabilmente avrai l'esigenza di
                               //utilizzare una classe apposita rappresentare i ruoli, o cmq
                               //vorrai trovare una soluzione piu' elegante come usare un'enum
    
    ...//tutti i metodi getter, setter, e quant'altro ti serva
    
    }
    il funzionamento e' questo:

    1) quando l'utente esegue il login, tu carichi dal database l'oggetto Utente a partire dallo username inserito dall'utente. Se getPassword() corrisponde a quella inserita dall'utente, l'autenticazione e' andata a buon fine. Tutto questo sarebbe:
    codice:
    Utente u = ....; //recuperi l'utente dal db a partire dallo username
    if(u.getPassword().equals(request.getParameter("psw")) { //controlli che la psw sia corretta
        HttpSession session = request.getSession();
        session.setAttribute("utente", u);
    }
    2) d'ora in poi puoi fare tutti i controlli recuperando l'attributo "utente" presente in sessione.
    codice:
    HttpSession session = request.getSession(false);
    Utente u = (Utente) session.getAttribute("utente");
    if(u.getRuolo().equals("amministratore")) {//esempio... ovviamente meno stringhe ci sono
                                                            //nel tuo codice meglio e'...
    .........
    }
    3) quando l'utente esegue il logout
    codice:
    HttpSession session = request.getSession(false);
    session.invalidate();
    se ti rimangono ancora dei dubbi non hai che da chiedere...

  5. #5
    Si un dubbio ce l'avrei: in realtà io (e il mio compagno) non usiamo classi java, se non per mandare mail o stampare su pdf..in realtà non creiamo un oggetto utente ma lo prendiamo direttamente dal database con request.getParameter("usr") e da li, nella stessa pagina jsp facciamo il controllo, prima di tutto sulla sua eventuale presenza nel DB, e in caso affermativo sulla sua pwd..una cosa del genere:

    INDEX.HTML
    codice:
    <%@page contentType="text/html"%>
    <%@page 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>
            pagina iniziale
            
    
    
            il master in xyz bla bla bla
            
    
    
            AUTENTICAZIONE
            <form method="post" action="/SITOMASTER/checklogin.jsp">
                Username:<INPUT type="text" NAME="usr" size=40>
                Password:<INPUT type="password" NAME="pwd" size=40>
                
    
    
                <INPUT TYPE="submit" VALUE="Accedi">
            </form>
            
    
    
            Per registrarti clikka 
            QUI
        </body>
    </html>
    Da qui viene mandato il tutto a CHECKLOGIN.JSP
    codice:
    <%@page language="java"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
    <c:if test="${empty param.usr or empty param.pwd}">
        <jsp:forward page="index.jsp"/>
    </c:if>
    
    <sql:setDataSource var="dataSrc"
    url="jdbc:hsqldb:hsql://localhost/xdb" driver="org.hsqldb.jdbcDriver"
    user="sa" password=""/>
    
    <sql:query var="asd" dataSource="${dataSrc}">
        SELECT usr,pwd,adm FROM utenti
    </sql:query>
            
    <c:forEach var="bubu" items="${asd.rows}">
        <c:if test="${bubu.usr==param.usr}">
            <c:if test="${bubu.pwd==param.pwd}">     
                <% session.setAttribute("user",request.getParameter("usr"));%>
                <% out.println (session.getAttribute("user"));%> 
                <c:if test="${bubu.adm==true}">
                    <jsp:forward page="administrator.jsp"/> 
                </c:if>
                <jsp:forward page="benvenuto.jsp"/>      
            </c:if>
        </c:if>
    </c:forEach>
            
    <jsp:forward page="index.jsp"/><%--non sono riuscito a trovare un match--%>
    e qui creiamo un oggetto session, è giusto così?In una pagina di benvenuto successiva, scriviamo appunto BENVENUTO <% out.println(session.getAttribute("user")); ed effettivamente mi trova l'utente loggato in quel momento..è giusto fare una cosa così?

    Grazie di nuovo...

    PS: non fare caso ad "asd" e "bubu", è il mio socio che ha molta fantasia nel trovare i nomi alle variabili..speriamo di ricordarci di cambiarli prima di consegnare il tutto...

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    378
    è un vincolo del progetto da realizzare quello di usare clissi solo per l'invio di mail e la scrittura su pdf ??

    Io personalmente trovo molto più comodo usare tutti classi a da dentro stampare il codice HTML della pagina.

    In questo modo il codice JAVA diventa molto più leggibile e facile da mantenere !!

    Per quanto riguarda la variabile di sessione faccio anche io + o - come l'esempio postato da nether.

    Creo una classe utente e la istanzio nel momento in cui l'utente si logga correttamente e metto l'oggetto così creato in sessione. In ogni pagina recupero l'oggetto e se diverso da null vuol dire che l'utente è loggato correttamente. In questo modo in tutte le pagine dove avrai bisogno dei dati dell'utente non dovrai + ccedere al database ma potrai semplicemente recuperare cio chè ti serve da questo oggetto.

    P.S. non so se ho capito io male o se ti sei spiagato male, ma quando dici di recuperare l'oggetto utente dal database, credo che ti riferisci al fatto di recuperare le singole voci che compongono la tabella degli utenti..... !?!?!

  7. #7
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    1) se possibile fai la query mettendo come condizione che lo username dell'utente che stai prendendo dal db sia uguale allo username che viene dal forum e la stessa cosa per la password...
    codice:
    <sql:query var="asd" dataSource="${dataSrc}">
        SELECT usr,pwd,adm FROM utenti WHERE usr=${param.usr} and pwd=${param.pwd}
    </sql:query>
    si puo' fare? oppure
    codice:
    <sql:query var="asd" dataSource="${dataSrc}">
        SELECT usr,pwd,adm FROM utenti WHERE usr=<c:out value="${param.usr}"/> and pwd=<c:out value="${param.pwd}"/>
    </sql:query>
    credo che uno dei due debba funzionare... perdonami ma non faccio mai query nelle pagine jsp. In ogni caso ci sara' un modo per passare dinamicamente dei parametri alle query.

    In questo modo, se il risultato della query non e' vuoto, vuol dire che l'autenticazione ha avuto successo e puoi trattare i dati contenuti nel risultato per metterli in sessione. Non devi piu' scorrere tutto il risultato (che conteneva TUTTI gli utenti presenti nel db) e confrontare ogni singolo nome utente con quello inserito nel form...

    2) naturalmente e' ESTREMAMENTE meglio usare una classe, come nell'esempio che ti ho riportato in precedenza, per gestire l'entita' "utente", ma se proprio vuoi farne a meno, trova comunque il modo di mettere in sessione tutto cio' che ti serve per poter gestire il tuo utente che si e' appena autenticato.
    Per esempio:
    codice:
    <c:set scope="session" var="user" value="${param.usr}"/>
    <c:set scope="session" var="adm" value="${bubu.adm}"/>
    Cosi' in ogni pagina successiva puoi sapere sia come si chiama l'utente, sia che ruolo ha.

  8. #8
    Originariamente inviato da bmw
    è un vincolo del progetto da realizzare quello di usare clissi solo per l'invio di mail e la scrittura su pdf ??

    Io personalmente trovo molto più comodo usare tutti classi a da dentro stampare il codice HTML della pagina.

    In questo modo il codice JAVA diventa molto più leggibile e facile da mantenere !!

    Per quanto riguarda la variabile di sessione faccio anche io + o - come l'esempio postato da nether.

    Creo una classe utente e la istanzio nel momento in cui l'utente si logga correttamente e metto l'oggetto così creato in sessione. In ogni pagina recupero l'oggetto e se diverso da null vuol dire che l'utente è loggato correttamente. In questo modo in tutte le pagine dove avrai bisogno dei dati dell'utente non dovrai + ccedere al database ma potrai semplicemente recuperare cio chè ti serve da questo oggetto.

    P.S. non so se ho capito io male o se ti sei spiagato male, ma quando dici di recuperare l'oggetto utente dal database, credo che ti riferisci al fatto di recuperare le singole voci che compongono la tabella degli utenti..... !?!?!
    Esatto..infatti non capisco come posso creare una classe e poi creare un oggetto utente all'interno del jsp;Mi spiego: io devo solo fare dei controlli al momento del login su user e password, mentre al momento della registrazione devo solo prendere i dati dal form registrazione (immetto una decina di dati, tra personali e acacdemici, come tipo di laurea, ecc) e metterli in una tab del DB con una semplice query..dopodichè a seconda di chi è loggato permetto di acceder a detreminati contenuti nel DB (e determinate jsp) interrogandolo con semplici query e controllando che ognuno possa accedere solo ai propri contenuti controllando il nome nell'oggetto session (come sopra) con quello nel DB e prendere quindi i contenuti relativi a quel nome (spiegazione un pò contorta ma è quello che intenderei fare)..Per questo mi sembra un pò eccessivo scrivere delle classi java apposite per poi richiamarle all'interno del jsp, per quello che devo fare sarebbe scrivere tanto codice per poco (tanto più che ho poca familiarità con questo linguaggio, benchè sia abb facile da capire)..cmq accetto molto volentieri suggerimenti, magari esempi, se avete qualche sito in cui viene esposta bene la cosa, son ben contento, un giorno o l'altro dovrò cominciare a fare ste cose con un minimo di professionalità..

  9. #9
    In particolare non riesco a capire bene questa parte, però mi sembrerebbe comoda:
    Creo una classe utente e la istanzio nel momento in cui l'utente si logga correttamente e metto l'oggetto così creato in sessione. In ogni pagina recupero l'oggetto e se diverso da null vuol dire che l'utente è loggato correttamente. In questo modo in tutte le pagine dove avrai bisogno dei dati dell'utente non dovrai + ccedere al database ma potrai semplicemente recuperare cio chè ti serve da questo oggetto.
    Cioè, come posso mettere tutti i dati dell'utente dentro l'oggetto?Forse con i classici metodi setter immetto tutte le informazioni relative all'utente nelle ripsettive variabili (nome, cognome, user, pwd data nascita, ecc) recuperandole dal database e poi quando mi servono le richiamo nelle varie pagine jsp tramite i metodi getter?
    ES: ccon questo
    Utente u = ....; //recuperi l'utente dal db a partire dallo username
    if(u.getPassword().equals(request.getParameter("ps w")) { //controlli che la psw sia corretta
    HttpSession session = request.getSession();
    session.setAttribute("utente", u);}

    creo l'oggetto utente in sessione chiamato "utente"; dopodiche in un'altra pagina richiamo la sessione con il metodo session.getAttribute("utente")) e per avre il nome ad es: uso il metodo getName()? Scusate la spiegazione a grandi linee,ma ho davvero poca familiarità..

  10. #10
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    e' esattamente come dici

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.