Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43

    [EJB/WAR] JAAS: Esempio pratico

    Ciao sono alle prese con JAAS, vorrei capire come si progetta un'applicazione enterprise attraverso l'utilizzo di queste librerie...
    Oltre all'utilizzo delle annotazioni @RolesAllowed marcando i metodi business cosa devo fare? Ho letto vari tutorial sul web ma non mi sono fatto ancora un'idea su come implementarlo...
    Avete qualche esempio dove posso capire il funzionamento?
    E se volessi autorizzare a determinati ruoli(anzichè marcare i metodi con @RolesAllowed("RUOLO") ) la visualizzazione o meno di determinate pagine... tipo tutte le pagine presenti in cartella admin devono essere visualizzate solo dall'amministratore ad esempio....

    Come posso fare?

  2. #2
    Allora il JAAS (Java Authentication and Authorization Service) si "applica" sia agli EJB, sia al "Contesto Web".
    Come hai ben detto marcando gli ejb o i metodi in esso contenuti si può controllare che tali metodi vengano invocati da determinati utenti/ruoli.
    Per quanto invece concerne l'accesso alle risorse web, al momento non esiste nessun tipo di annotazione che permette di dire che quella pagina deve essere visualizzata solo da un utente/ruolo, questa configurazione viene fatta nel descrittore dell'applicativo web (web.xml) attreverso i tag <login-config> , <security-constraint> e <security-role>.
    Il primo permette di configurare il tipo di login che l'applicativo dovrà avere, il secondo permette di specificare quale risorse(pagine, cartelle) devono essere messe in sicurezza e quali ruoli possono avere accesso a tali risorse.
    Il terzo serve a specificare tutti i ruoli che vengono definiti per l'applicativo.
    Un esempio banale lo trovi qui.
    Ovviamente il jaas prevede una configurazione anche lato server in modo da dirgli dove deve andare a pescare utente/password e ruolo associato.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    ciao
    sbaglio o sul link spiega sì come configurare il progetto con JAAS modiifcando i deployment descriptor ma non spiega come devo configurare JAAS per fargli effettuare diciamo il "check" sul database... c'è un esempio con JBOSS ma a quanto mi pare di capire sembra che la query nel db venga fatta modificando dei file xml :? ... non si può fare in un bean normalmente ?
    e poi scusami il compito del Filtro quale sarebbe?

  4. #4
    Allora l'esempio che ti ho postato fa riferimento a JBOSS in esso è possibile definire diversi "Security Real" che appunto effettuano il "check" dell'utente. Di default Jboss mette diversi tipi di realms tra cui appunto il JDBC Realm (quello dell'esempio).
    Ovviamente puoi anche creare il tuo realm qui trovi l'implementazione di un Custom Login Module.
    Ovviamente anche in questo caso dovrai modificare o comunque aggiungere il tuo realm alla configurazione del server (file xml).
    e poi scusami il compito del Filtro quale sarebbe?
    A che filtro ti stai riferendo ?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    su quell'esempio che mi hai postato in precedenzo c'era un link con un esempio dicome effettuare il login con JAAS + JBOSS dove c'era questo FILTRO .

    Ovviamente puoi anche creare il tuo realm qui trovi l'implementazione di un Custom Login Module.
    Ovviamente anche in questo caso dovrai modificare o comunque aggiungere il tuo realm alla configurazione del server (file xml).
    Ne vale la pena crearmi il mio realm customizzato solo per connettermi ad un database mysql? Visto che glassfish mi offre già un realm pronto che fà uso della libreria JDBC per collegarmi al mio db? tipo ho trovato questo .. solo che la mia perplessità è perchè devo creare una "risorsa" che mi rappresenti il database (non mi è chiaro tanto questo concetto)... non posso far riferimento che nè sò al DATASOURCE o direttamente alla PersistenceUnit di JPA... Inoltre con glassfish sembra che viene fatto tutto tramite l'interfaccia d'amministrazione. ma penso che andrà sempre a modificare i suoi descrittori in maniera trasparente..devo documentarmi un pò di più..

  6. #6
    Allora il filtro che vedi serve solo a stampare l'utente che è attualmente loggato niente di più.
    Ne vale la pena crearmi il mio realm customizzato solo per connettermi ad un database mysql? Visto che glassfish mi offre già un realm pronto che fà uso della libreria JDBC per collegarmi al mio db?
    Sei stato tu a chiederlo io mi sono limitato a risponderti.
    tipo ho trovato questo .. solo che la mia perplessità è perchè devo creare una "risorsa" che mi rappresenti il database (non mi è chiaro tanto questo concetto)... non posso far riferimento che nè sò al DATASOURCE o direttamente alla PersistenceUnit di JPA...
    Al punto due di quella guida ti dice appunto che dovrai creare un datasource a quale collegare il realm che poi andrai a creare. Alla persistenceunit, se usi il realm di glassfish, non ti puoi collegare (che ne sa in quale applicativo deve andare a cercare tale unità di persistenza ?!?).
    Inoltre con glassfish sembra che viene fatto tutto tramite l'interfaccia d'amministrazione. ma penso che andrà sempre a modificare i suoi descrittori in maniera trasparente..devo documentarmi un pò di più..
    Anche Jboss ha la sua interfaccia grafica per fare queste operazioni....

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    Citazione:

    Ne vale la pena crearmi il mio realm customizzato solo per connettermi ad un database mysql? Visto che glassfish mi offre già un realm pronto che fà uso della libreria JDBC per collegarmi al mio db?

    Sei stato tu a chiederlo io mi sono limitato a risponderti.
    si perchè pensavo che il codice del login lo dovevo scrivere io, mentre viene fatto diciamo in maniera automatica attraverso il security realm (che anzichè semplificarmi la vita mi sta dando solo problemi)..Una cosa ancora non ho capito, a livello teorico, il realm cos'è? È un qualcosa che riguarda java o l'application server, perchè da un application server all'altro esso cambia pure...
    e poi quando vado ad aggiungerlo dall'interfaccia di amministrazione di glassfish , ci sono alcune proprietà che devo specificare tra cui il JAAS CONTEXT,cos'è?perchè dal tutorial dà particolare importanza a questo campo indicando di inserire il valore "jdbcRealm"....


    E poi un'altra cosa..a livello pratico... il database come deve essere costruito io inizialmente avevo messo nella tabella Utenti anche un attributo RUOLO che era chiave esterna ad un'altra tabella Gruppo...
    Ora vedendo gli esempi l'ho fatto in questo modoguarda allegato)


    (perchè facendo il login mi dà autenticazione fallita e sto cercando di capire dove stà il problema)
    Immagini allegate Immagini allegate

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    E poi un'altra cosa..a livello pratico... il database come deve essere costruito io inizialmente avevo messo nella tabella Utenti anche un attributo RUOLO che era chiave esterna ad un'altra tabella Gruppo...
    Ora vedendo gli esempi l'ho fatto in questo modoguarda allegato)


    (perchè facendo il login mi dà autenticazione fallita e sto cercando di capire dove stà il problema)
    MALEDETTO GLASSFISH!!!
    HO PERSO TEMPO SU TEMPO SU TEMPO PER CAPIRE DOVE STAVA IL PROBLEMA.....ED IL PROBLEMA ERA SEMPLICEMENTE ........... RIAVVIARE GLASSFISH!!!!

  9. #9
    Una cosa ancora non ho capito, a livello teorico, il realm cos'è? È un qualcosa che riguarda java o l'application server, perchè da un application server all'altro esso cambia pure...
    Il Security Realm diciamo che è il meccanismo con il quale un application server deve autenticare l'utente che richiede accesso. Quindi è legato specificamente al JAAS che ovviamente è legato agli application server.
    Tutti gli application server J2EE hanno i proprio realm, quello che cambia è il modo con il quale vengono "costruiti" la sostanza non cambia.
    e poi quando vado ad aggiungerlo dall'interfaccia di amministrazione di glassfish , ci sono alcune proprietà che devo specificare tra cui il JAAS CONTEXT,cos'è?perchè dal tutorial dà particolare importanza a questo campo indicando di inserire il valore "jdbcRealm"....
    Il "JAAS CONTEXT" è la proprietà che glassfish ti mette a disposizione per configurare il tipo di realm che vuoi usere. I possibili valori (nella nuovissima versione di Glassfish) sono :
    -file: le informazioni per il login degli utenti vengono salvate in un file di testo.
    -ldap : permette di autenticare l'utente in base appunto al sistema LDAP
    -jdbc : quello usato da te. Permette di autenticare l'utente con le informazioni che stanno sul DB
    -certificate : le informzioni vengono salvate è lette dai certificati di sicurezza.
    -solaris : permette di riutilizzare il meccanismo di sicurezza dei sistemi operativi solaris.
    E poi un'altra cosa..a livello pratico... il database come deve essere costruito io inizialmente avevo messo nella tabella Utenti anche un attributo RUOLO che era chiave esterna ad un'altra tabella Gruppo...
    Il database lo poi "quasi" costruire come vuoi, l'importante è fornire all'application server due query :
    La prima dati in ingresso username e password deve restituire un utente a cui appartengono tali credenziali.
    La secondo data un username deve restituire tutti i Ruoli assegnati a quel username.
    Quindi, per esempio, potresti creare anche una sola tabella Utente(username,password,ruolo) e fornire a glassfish le seguenti query:
    1) Select Distinct username,password From Utente where username = ? and password = ? (la distinct serve se vuoi gestire il fatto che un utente può avere più ruoli).
    2)Select ruolo From Utente where username = ?

    A proposito del riavvio, una cosa che mi viene dall'esperienza, ogni volta che effettui una qualsivoglia operazione di configurazione dell'application server riavvialo sempre.....

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    43
    Tutti gli application server J2EE hanno i proprio realm, quello che cambia è il modo con il quale vengono "costruiti" la sostanza non cambia.
    Si appunto che vengono costruiti in dipendenza dell'AS mi domandavo questo... ma il realm ha a che fare con l'implementazioni di Classi del JAAS (LoginModule, LoginContext e CallbackHandler)

    Quindi, per esempio, potresti creare anche una sola tabella Utente(username,password,ruolo) e fornire a glassfish le seguenti query:
    1) Select Distinct username,password From Utente where username = ? and password = ? (la distinct serve se vuoi gestire il fatto che un utente può avere più ruoli).
    2)Select ruolo From Utente where username = ?
    Magari era così... glassfish non mi dà la possibilità di passargli il modo in cui deve ricercare i valori nel db... ma gli dici soltanto quali sono le tabelle e quali sono le colonne che contengono username - password e ruolo

    A proposito del riavvio, una cosa che mi viene dall'esperienza, ogni volta che effettui una qualsivoglia operazione di configurazione dell'application server riavvialo sempre.....
    D'ora in poi sì! L'ho imparato a mie spese!

    Un'altra cosa.. una volta effettuato il login ecc come faccio attraverso un bean a trapelare tutte le info riguardanti l'utente loggato(nomeUtente,Ruolo, ecc)

    Sulla documentazione fà riferimento alle classi citate prima (che se ho capito bene vengono utilizzato per un contesto J2SE)

    Grazie per le risposte!

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.