Login e sessione utente

di il
5 risposte

Login e sessione utente

Ciao ragazzi,
sto sviluppando una applicazione web contenente una pagina index.html e diverse pagine jsp. Qualsiasi utente può navigare in tutte le pagine liberamente ad eccezione della pagina aggiungi.jsp per la quale è necessaria una autenticazione (che devo ancora mettere a punto). Quello che vorrei fare è spiegato nei seguenti 2 punti:

1) se l' utente effettua il login dalla pagina index.html, l' applicazione deve "ricordarsi" che l' utente è autenticato, quindi quando in un qualsiasi momento successivo l' utente prova ad andare sulla pagina aggiungi.jsp, l' applicazione deve consentirgli l' accesso a tale pagina.

2) se l' utente non effettua il login dalla pagina index.html, quando proverà ad accedere alla pagina aggiungi.jsp, l' applicazione deve chiedergli di inserire username e password per autenticarsi.

Ora, vorrei qualche linea guida su come eseguire queste cose. Se non sbaglio, quello che voglio fare è creare una sessione utente (giusto?) e sempre se non sbaglio potrei farla utilizzando un cookie (giusto?). Quindi ad ogni login dovrei creare un cookie che poi dovrei distruggere a seguito di un logout. Fatemi sapere se è giusto questo modo di procedere e se magari ci sono modi più efficienti per gestire questa cosa.

5 Risposte

  • Re: Login e sessione utente

    Salva ha scritto:


    1) se l' utente effettua il login dalla pagina index.html, l' applicazione deve "ricordarsi" che l' utente è autenticato, quindi quando in un qualsiasi momento successivo l' utente prova ad andare sulla pagina aggiungi.jsp, l' applicazione deve consentirgli l' accesso a tale pagina.
    Precisa cosa intendi per "in un qualsiasi momento successivo". Anche dopo che l'utente ha chiuso il browser e magari anche il PC? Il giorno dopo riapre il browser sul tuo sito e vuoi che sia automaticamente "loggato" senza passare di nuovo per la procedura di login?

    Questo è quello che fanno molti siti, webmail, forum, ecc.. offrendo al login una opzione con la casellina [ ] da marcare, che a seconda di come viene espresso si può chiamare "Ricorda su questo computer" oppure "Ricorda per X giorni" o ancora "Mantieni aperto per X giorni".
    E questo lo si fa con i "cookie". Appena dopo l'autenticazione, il server invia al client un cookie che invece di essere "di sessione" (ovvero che scade quando il browser viene chiuso) ha una scadenza molto più lunga, ad esempio scade dopo 90 giorni da quel momento. E questo cookie viene mantenuto persistente dal browser sulla macchina dell'utente. Così il giorno dopo, due giorni dopo, ecc... è ancora lì e il sito lo riceve e ne può fare uso per "auto loggare" l'utente.

    Il problema (grosso) è che il contenuto di questo cookie è estremamente "delicato" e deve essere opportunamente offuscato/criptato in modo da non rivelare nulla della utenza. Deve essere scelto e gestito molto accuratamente. E inoltre ci sono le (solite) questioni sulla sicurezza: che succede se qualcuno (con intenzioni malevole, chiaramente) riesce attraverso la rete (o nel PC) a carpire quel cookie? Avrebbe pieno accesso al sito con quella utenza!

    Te lo dico subito: NON è "banale" farlo bene e in modo ragionevolmente serio/sicuro.

    Salva ha scritto:


    2) se l' utente non effettua il login dalla pagina index.html, quando proverà ad accedere alla pagina aggiungi.jsp, l' applicazione deve chiedergli di inserire username e password per autenticarsi.
    Questo lo si fa "proteggendo" le risorse (la/e pagina/e) "ristrette" ai soli utenti loggati tramite le funzionalità offerte da eventuali framework e/o dall'application server.
    In Java EE, a livello basilare/minimale, è possibile sfruttare la security "dichiarativa" che si può realizzare attraverso la configurazione nel web.xml. Si può indicare quali sono le risorse "protette", quali "ruoli" degli utenti possono accederci e altro.
    In alternativa puoi implementare una tua security "programmatica" come ti pare, chiaramente tramite del codice, magari sfruttando i Filter della API Servlet.
    E a seconda dei framework utilizzati (es. Spring Framework) si possono usare altri meccanismi di security (es. Spring Security se si usa Spring Framework).

    Senza sapere il contesto e le caratteristiche della tua applicazione, non saprei che altro dire. Cerca di documentarti, perché è un argomento abbastanza ampio e non banale.
  • Re: Login e sessione utente

    Innanzitutto ti ringrazio vivamente per le dritte che mi hai dato, che mi hanno chiarito un po' la situazione.
    Premetto che è un progetto per un esame universitario, quindi un progetto didattico; tralaltro non abbiamo mai fatto corsi di programmazione pura su jsp, java, ecc ecc. Comunque, anche puramente a livello teorico è interessante sapere come andrebbero fatte le cose nel caso si trattasse di una applicazione professionale.

    Con "in qualsiasi momento successivo" mi può anche andar bene qualsiasi momento fino a quando l' utente chiude il browser. Quindi dopo che l' utente chiude il browser e poi lo riapre, se vuole accedere ad aggiungi.jsp, deve autenticarsi nuovamente. Quindi, come dici tu, dovrei "usare un cookie di sessione".

    Per quanto riguarda la sicurezza, capisco che non è argomento semplice/banale, ma comunque vorrei implementare qualcosa che non dico sia professionale, ma sia fatta discretamente bene. Quali strade posso seguire? Ho pensato magari di usare qualche funzione di Hash.

    Per quanto riguarda la protezione delle risorse rendendole accessibili solo a determinati utenti, vidi qualcosa quando studiai Apache HTTP server, dove si andava a configurare in maniera opportuna il file httpd.conf e altri file ad esso correlati. Da quanto mi è parso di capire, credo che qui vada fatta una cosa simile, solo che non utilizzando Apache ma Tomcat giustamente si deve andar a mettere mani al file web.xml. Credo che questa sia la strada migliore o comunque più fattibile considerando il "livello didattico" della mia applicazione.

    Detto in breve, l' applicazione che sto realizzando sfrutta, come detto, il server Tomcat, e, sostanzialmente permette, dati in input 1 o più requisiti non funzionali, di calcolare quale è il design pattern (o i design pattern) che meglio soddisfa/soddisfano tali requisiti...quindi diciamo un framework per sviluppatori. Tutta la parte di computazione dei design pattern si basa su una ontologia (file .owl) nel quale sono riportate le definizioni e le relazioni tra i design pattern e i requisiti non funzionali.
  • Re: Login e sessione utente

    Dimenticavo: nella homapage (index.html) sono presenti vari bottoni ogn' uno dei quali permette di accedere ad una diversa pagina .jsp. Clikkando su "Search" si apre la pagina per dare in input i requisiti non funzionali e ricevere i design pattern adatti; clikkando su "Home" si torna su index.html; cliccando su "NFR" e "Pattern", si accede, a delle pagine .jsp nelle quali sono riportati rispettivamente tutti i requisiti non funzionali e i design pattern contenuti nell' ontologia (con le relative descrizioni); infine clikkando su "Add" si accede alla pagina aggiungi.jsp che permette di aggiungere un nuovo design pattern o un nuovo requisito non funzionale nell' ontologia. Però, alla pagina aggiungi.jsp deve poter accedere solo un amministratore, quindi un solo utente, che si presuppone essere esperto.
  • Re: Login e sessione utente

    Salva ha scritto:


    Quindi, come dici tu, dovrei "usare un cookie di sessione".
    La "sessione", come intesa nelle webapp Java EE è già gestita in automatico tramite cookie (o in alternativa tramite i link), non hai da gestire alcun cookie direttamente, per questo.

    Salva ha scritto:


    Per quanto riguarda la sicurezza, capisco che non è argomento semplice/banale, ma comunque vorrei implementare qualcosa che non dico sia professionale, ma sia fatta discretamente bene. Quali strade posso seguire? Ho pensato magari di usare qualche funzione di Hash.
    Ripeto che non serve. Documentati sulle sessioni in Java EE, in particolare l'uso della classe javax.servlet.http.HttpSession

    Salva ha scritto:


    Per quanto riguarda la protezione delle risorse rendendole accessibili solo a determinati utenti, vidi qualcosa quando studiai Apache HTTP server, dove si andava a configurare in maniera opportuna il file httpd.conf e altri file ad esso correlati. Da quanto mi è parso di capire, credo che qui vada fatta una cosa simile, solo che non utilizzando Apache ma Tomcat giustamente si deve andar a mettere mani al file web.xml. Credo che questa sia la strada migliore o comunque più fattibile considerando il "livello didattico" della mia applicazione.
    Sì ma il web.xml della applicazione (non di Tomcat). Con la security "dichiarativa", un servlet-container o application server completo c'entrano ma solo per la definizione di utenti e ruoli. Idem, serve che ti documenti.
  • Re: Login e sessione utente

    https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html
Devi accedere o registrarti per scrivere nel forum
5 risposte