Copyright © 2005 Emmanuele Bello - TorLUG
Web application sicure conWeb application sicure con
Acegi Security System for SpringAcegi Security System for Spring
Roma,Roma,26 Novembre 200526 Novembre 2005
Copyright © 2005 Emmanuele Bello - TorLUG 1
AgendaAgenda
• • IntroduzioneIntroduzione
• • Fondamenti di sicurezzaFondamenti di sicurezza
• • AutenticazioneAutenticazione
• • AutorizzazioneAutorizzazione
• • Codice – Info@TVCodice – Info@TV
• • ConclusioneConclusione
Copyright © 2005 Emmanuele Bello - TorLUG 2
IntroduzioneIntroduzione
• • Iniziare a lavorare sul vostro progetto con Acegi Iniziare a lavorare sul vostro progetto con Acegi Security SystemSecurity System
• • RequisitiRequisiti
- Programmazione Java (Standard - Enterprise), Design Patterns, - Programmazione Java (Standard - Enterprise), Design Patterns, XML.XML.
• • Il framework SpringIl framework Spring
• • Sicurezza Enterprise: autenticazione, web-Sicurezza Enterprise: autenticazione, web-request, service security, Domain Object Securityrequest, service security, Domain Object Security
Copyright © 2005 Emmanuele Bello - TorLUG 3
Introduzione 2Introduzione 2
• • La sicurezza è un La sicurezza è un “aspetto”“aspetto” fondamentale... fondamentale...
PrivacyPrivacy
WebWeb
Data SecurityData Security
Object SecurityObject Security
Copyright © 2005 Emmanuele Bello - TorLUG 4
OWASPOWASP The Open Web Application Security Project
• • La Top Ten ha lo scopo di:La Top Ten ha lo scopo di:
• • Nasce per aiutare le aziende a valutare la Nasce per aiutare le aziende a valutare la sicurezza delle applicazioni e dei servizi websicurezza delle applicazioni e dei servizi web
http://www.owasp.org
- sensibilizzare i programmatori sugli errori piu' frequenti;- sensibilizzare i programmatori sugli errori piu' frequenti;
- dare dei parametri immediati per “correre ai ripari”.- dare dei parametri immediati per “correre ai ripari”.
- delineare i perimetri di rischio all'aumentare dei servizi offerti;- delineare i perimetri di rischio all'aumentare dei servizi offerti;
““Il codice della tua applicazione web è parte del tuo sistema di sicurezza!”Il codice della tua applicazione web è parte del tuo sistema di sicurezza!”
Copyright © 2005 Emmanuele Bello - TorLUG 5
OWASPOWASP The Open Web Application Security Project
http://www.owasp.org
OWASP TOP TENOWASP TOP TEN
A1 – Unvalidated InputA1 – Unvalidated Input
A2 – Broken Access ControlA2 – Broken Access Control
A3 – Broken Authentication and Session ManagementA3 – Broken Authentication and Session Management
A4 – Cross Site Scripting (XSS) FlawsA4 – Cross Site Scripting (XSS) Flaws
A5 – Buffer OverflowsA5 – Buffer Overflows
A6 – Injection FlawsA6 – Injection Flaws
A7 – Improper Error HandlingA7 – Improper Error Handling
A8 – Insecure StorageA8 – Insecure Storage
A9 – Denial of ServiceA9 – Denial of Service
A10 – Insecure Configuration ManagementA10 – Insecure Configuration Management
Copyright © 2005 Emmanuele Bello - TorLUG 6
Fondamenti di SicurezzaFondamenti di Sicurezza
Alcuni termini utili per il futuro...Alcuni termini utili per il futuro...
• • Autorizzazione (Authorization) o Access Control:Autorizzazione (Authorization) o Access Control:
• • Principal (username):Principal (username):
• • Credentials (Password):Credentials (Password):
• • Autenticazione (Authentication):Autenticazione (Authentication):- “Controllare se il richiedente è veramente chi dice di essere”- “Controllare se il richiedente è veramente chi dice di essere”
- “Controllare cosa il richiedente, autenticato, puo' fare- “Controllare cosa il richiedente, autenticato, puo' faresull'applicazione o sul sistema”sull'applicazione o sul sistema”
- “Macchine o utenti unicamente identificati nel sistema”- “Macchine o utenti unicamente identificati nel sistema”
- “Qualcosa che il Principal fornisce per provare che è veramente chi dice di essere”- “Qualcosa che il Principal fornisce per provare che è veramente chi dice di essere”
Copyright © 2005 Emmanuele Bello - TorLUG 7
Spring FrameworkSpring Frameworkhttp://www.springframework.org
• • Creato da Rod Johnson - Creato da Rod Johnson - Interface21Interface21; ; versione corrente 1.2.5versione corrente 1.2.5
• • Progetto Open Source:Progetto Open Source:
- Rendere le applicazioni J2EE facili e strutturate, grazie alla sua architettura interna;- Rendere le applicazioni J2EE facili e strutturate, grazie alla sua architettura interna;
- Fornire un buon metodo di programmazione;- Fornire un buon metodo di programmazione;
- Possibilità di usare moduli in modo autonomo o aggregati.- Possibilità di usare moduli in modo autonomo o aggregati.
• • Perchè Spring?Perchè Spring?-- http://www.theserverside.com/articles/content/RodJohnsonInterview/JohnsonChapter4.pdf http://www.theserverside.com/articles/content/RodJohnsonInterview/JohnsonChapter4.pdf
-- http://www.theserverside.com/resources/article.jsp?l=SpringFramework http://www.theserverside.com/resources/article.jsp?l=SpringFramework
Copyright © 2005 Emmanuele Bello - TorLUG 8
Spring FrameworkSpring Frameworkhttp://www.springframework.org
• • OverviewOverview
Copyright © 2005 Emmanuele Bello - TorLUG 9
Spring FrameworkSpring Frameworkhttp://www.springframework.org
• • Full-fledged Spring web applicationFull-fledged Spring web application
Copyright © 2005 Emmanuele Bello - TorLUG 10
Spring FrameworkSpring Frameworkhttp://www.springframework.org
• • CaratteristicheCaratteristiche- Il Core è disegnato per lavorare con i Java Beans; - Il Core è disegnato per lavorare con i Java Beans; lo fa tramite lo fa tramite BeanFactoryBeanFactory..
• • IoC – Inversion of Control PatternIoC – Inversion of Control Pattern- Ogni oggetto espone le proprie dipendenze - Ogni oggetto espone le proprie dipendenze mediante una sorta di contratto invece che mediante una sorta di contratto invece che risolverle automaticamente;risolverle automaticamente;
- Rende le applicazioni flessibili, robuste e - Rende le applicazioni flessibili, robuste e riutilizzabili. Gli oggetti sono disaccoppiati e piu' riutilizzabili. Gli oggetti sono disaccoppiati e piu' gestibili.gestibili.
• • Dependency InjectionDependency Injection- Le dipendenze vengono “iniettate” nei - Le dipendenze vengono “iniettate” nei componenti della applicazione da una componenti della applicazione da una entità entità esternaesterna..
Entità esternaEntità esterna: LightWeight container. Spring, : LightWeight container. Spring, Avalon, PicoContainer, Excalibur, HiveMind, Carbon,...Avalon, PicoContainer, Excalibur, HiveMind, Carbon,...
Copyright © 2005 Emmanuele Bello - TorLUG 11
Spring FrameworkSpring Frameworkhttp://www.springframework.org
• • Service Locator vs. Dependency InjectionService Locator vs. Dependency Injection
Service LocatorService Locator Dependency InjectionDependency Injection
- Devo chiedere le dipendenze al Locator.- Devo chiedere le dipendenze al Locator.
- Dipendo in modo pesante dal Locator.- Dipendo in modo pesante dal Locator.
- Accettabile se devo usare un Locator - Accettabile se devo usare un Locator fatto da me, ma se devo riusare...fatto da me, ma se devo riusare...
- Le dipendenze mi vengono assegnate.- Le dipendenze mi vengono assegnate.
- Non dipendo dal framework e tanto - Non dipendo dal framework e tanto meno dal locator.meno dal locator.
- Non intuitivo.- Non intuitivo.
Tutte queste dipendenze (Setter Method, Constructor, Interface, Context) si Tutte queste dipendenze (Setter Method, Constructor, Interface, Context) si configurano in un file XML, chiamato solitamente configurano in un file XML, chiamato solitamente applicationContext-xyz.xmlapplicationContext-xyz.xml..
Copyright © 2005 Emmanuele Bello - TorLUG 12
Spring FrameworkSpring Frameworkhttp://www.springframework.org
• • Esempio di Dependency Injection usando la Esempio di Dependency Injection usando la tecnica “Setter Methods”tecnica “Setter Methods”
<bean id=”exampleBean” class=”examples.ExampleBean”><property name=”beanOne”><ref bean=”anotherBean”/></property><propetry name=”beanTwo”><ref bean=”someBean” /></propery><property name="integerProperty">1</property></bean>
<bean id=”anotherBean” class=”examples.AnotherBean” /><bean id=”someBean” class=”examples.someBean” />
public class ExampleBean {/* Variabili di istanza */private AnotherBean beanOne; private someBean beanTwo;private int i;
public void setBeanOne(AnotherBean beanOne) { this.beanOne = beanOne; }public void setBeanTwo(SomeBean beanTwo ) { this.beanTwo = beanTwo; }public void setIntegerProperty(int i ) { this.i = i; }}
PPlainlainOOldldJJavaavaOObjectbject
Copyright © 2005 Emmanuele Bello - TorLUG 13
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Creato da Creato da Ben AlexBen Alex; versione corrente ; versione corrente 0.9.00.9.0; ; pienamente appoggiato dagli autori di Springpienamente appoggiato dagli autori di Spring
- Fornire un layer di sicurezza per le - Fornire un layer di sicurezza per le applicazioni “Spring oriented”.applicazioni “Spring oriented”.
• • Obiettivi del progetto:Obiettivi del progetto:
- Puo' essere usato fuori del contesto di - Puo' essere usato fuori del contesto di Spring.Spring.
http://acegisecurity.sourceforge.net/standalone.htmhttp://acegisecurity.sourceforge.net/standalone.htmll
• • Mailing list ufficiale del progetto:Mailing list ufficiale del progetto:
http://acegisecurity.sourceforge.net/mail-lists.htmlhttp://acegisecurity.sourceforge.net/mail-lists.html
...scrivete Acegi Security System!!!...scrivete Acegi Security System!!!
Copyright © 2005 Emmanuele Bello - TorLUG 14
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • FondamentiFondamenti
Security Security InterceptorInterceptor
Access Decision Access Decision ManagerManager
Run-as Run-as ManagerManager
Authentication Authentication ManagerManager
Richieste webRichieste web
==
Copyright © 2005 Emmanuele Bello - TorLUG 15
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Security InterceptorSecurity Interceptor- Pensato come una serratura, per sbloccarla dovete darle qualche cosa, - Pensato come una serratura, per sbloccarla dovete darle qualche cosa, tipicamente username e password (Principal&Credentials) per accedere al tipicamente username e password (Principal&Credentials) per accedere al sistema.sistema.
• • Authentication ManagerAuthentication Manager- E' responsabile nel determinare chi è il richiedente, ovviamente lo fa valutando - E' responsabile nel determinare chi è il richiedente, ovviamente lo fa valutando ID e PWD. Se lo avete convinto ora il sistema sa con chi ha a che fare!ID e PWD. Se lo avete convinto ora il sistema sa con chi ha a che fare!
• • Access Decision ManagerAccess Decision Manager- E il responsabile delle autorizzazioni concesse a chi risulta autenticato. - E il responsabile delle autorizzazioni concesse a chi risulta autenticato. Autorizza in base alle credenziali, e ad informazioni di sicurezza (ad esempio il Autorizza in base alle credenziali, e ad informazioni di sicurezza (ad esempio il Ruolo “ROLE_”).Ruolo “ROLE_”).
• • Run-As ManagerRun-As Manager- Pensato per restringere maggiormente la zona sicura di accesso per un utente. - Pensato per restringere maggiormente la zona sicura di accesso per un utente. Puo' essere usato per sostituire “Puo' essere usato per sostituire “AuthenticationAuthentication” e dargli +/- potere.” e dargli +/- potere.
Copyright © 2005 Emmanuele Bello - TorLUG 16
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • AutenticazioneAutenticazione- Determinare in modo univoco l'identità di un utente.- Determinare in modo univoco l'identità di un utente.
- Chi si preoccupa di stabilire l'identità è:- Chi si preoccupa di stabilire l'identità è:
net.sf.acegisecurity.AuthenticationManager
public interface AuthenticationManager {public Authentication authenticate(Authentication authentication)
throws AuthenticationException;}
PrincipalPrincipal
CredentialsCredentialsAuthenticationAuthentication
authenticate (...)authenticate (...)AuthenticationAuthentication
...facile no? Ma devo scrivere una mia classe? Se voglio... ma di default ci ...facile no? Ma devo scrivere una mia classe? Se voglio... ma di default ci pensa Acegi Security System, vediamo come...pensa Acegi Security System, vediamo come...
Copyright © 2005 Emmanuele Bello - TorLUG 17
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • ProviderManager ProviderManager implements AuthenticationManagerimplements AuthenticationManager
- Delega la responsabilità di autenticarsi ai provider.- Delega la responsabilità di autenticarsi ai provider.
Provider Provider ManagerManager
Dao Dao Authentication Authentication
ProviderProvider
Jass Jass Authentication Authentication
ProviderProvider
Password Dao Password Dao Authentication Authentication
ProviderProvider
Cas Cas Authentication Authentication
ManagerManager
Remote Remote Authentication Authentication
ProviderProvider
<bean id="authenticationManager" class="net.sf.acegisecurity.providers.ProviderManager"><property name="providers">
<list><ref bean="daoAuthenticationProvider"/><ref bean="passwordDaoProvider"/>
</list></property>
</bean>
Copyright © 2005 Emmanuele Bello - TorLUG 18
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Autenticazione su DataBase Autenticazione su DataBase esempioesempio
- Posso usare due providers, quali:- Posso usare due providers, quali:
* * DaoAuthenticationProviderDaoAuthenticationProvider – il DAO esegue la vera autenticazione; – il DAO esegue la vera autenticazione;
* * PasswordDaoAuthenticationProviderPasswordDaoAuthenticationProvider – la responsabilità è esterna – la responsabilità è esterna al DAO (es. Ligthweight Directory Access Protocol).al DAO (es. Ligthweight Directory Access Protocol).
Authentication Authentication ManagerManager
Dao Dao Authentication Authentication
ProviderProvider
Authentication Authentication DaoDao
authenticate ()authenticate () loadByUsername()loadByUsername()
User User DatabaseDatabase
<bean id="authenticationProvider” class="net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="authenticationDao"><ref bean="authenticationDao"/>
</property></bean>
...magari customizzato (InfoTvAuthenticationDao.java)
Copyright © 2005 Emmanuele Bello - TorLUG 19
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Password EncryptionPassword Encryption- OWASP (A3): Broken authentication/session management- OWASP (A3): Broken authentication/session management
- Di default il DaoAuthenticationProvider assume che - Di default il DaoAuthenticationProvider assume che la passowrd è in chiaro.la passowrd è in chiaro.
* * PlainTextPasswordEncoderPlainTextPasswordEncoder – (defualt) nessuna codifica; – (defualt) nessuna codifica;
* * Md5PasswordEncoderMd5PasswordEncoder – usa Md5 per la codifica; – usa Md5 per la codifica;
* * ShaPasswordEncoderShaPasswordEncoder – usa Secure Hash Algorithm per la codifica. – usa Secure Hash Algorithm per la codifica.
- Modifcate il DaoAuthenticationProvider, aggiungendo la proprietà...- Modifcate il DaoAuthenticationProvider, aggiungendo la proprietà...
<property name="passwordEncoder"><bean class="net.sf.acegisecurity.providers.encoding.Md5PasswordEncoder"/>
</property>
- Possiamo dare anche un po' di “sale” alla password:- Possiamo dare anche un po' di “sale” alla password:
* * ReflectionSaltSourceReflectionSaltSource – usa una proprietà dell'oggetto User; – usa una proprietà dell'oggetto User;
* * SystemWideSaltSourceSystemWideSaltSource – usa la stessa proprietà per tutti gli utenti; – usa la stessa proprietà per tutti gli utenti;
<property name="saltSource"><bean class="net.sf.acegisecurity.providers.dao.salt.ReflectionSaltSource"/>
</property>
Copyright © 2005 Emmanuele Bello - TorLUG 20
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • CachingCaching- Potrebbe essere utile avere le informazioni di un utente - Potrebbe essere utile avere le informazioni di un utente autenticato senza dovere fare continuamente query sul DB.autenticato senza dovere fare continuamente query sul DB.
public interface UserCache {public UserDetails getUserFromCache (String username);public void putUserInCache (UserDetails user);public void removeUserFromCache (String username);
}
- Il DaoAuthenticationProvider supporta il caching, implementando - Il DaoAuthenticationProvider supporta il caching, implementando net.sf.acegisecurity.providers.dao.UserCache
- Acegi Security System fornisce due comode implementazioni, quali:- Acegi Security System fornisce due comode implementazioni, quali:
* * net.sf.acegisecurity.providers.dao.cache.NullUserCachenet.sf.acegisecurity.providers.dao.cache.NullUserCache
* * net.sf.acegisecurity.providers.dao.cache.EhCacheBasedUserCachenet.sf.acegisecurity.providers.dao.cache.EhCacheBasedUserCache
http://ehcache.sourceforge.net/http://ehcache.sourceforge.net/
- Cache Open Source in Java.- Cache Open Source in Java.
Copyright © 2005 Emmanuele Bello - TorLUG 21
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Controllo degli accessiControllo degli accessi- Dopo essersi autenticati occorre avere il permesso di - Dopo essersi autenticati occorre avere il permesso di accedere alle risorse del sistema. AccessDecisionManager.accedere alle risorse del sistema. AccessDecisionManager.
public interface AccessDecisionManager {public void decide(Authentication authentication, Object object, ConfigAttributeDefinition config)
throws AccessDeniedException;public boolean supports(ConfigAttribute attribute);public boolean supports(Class clazz);
}
- Acegi Security System fornisce tre implementazioni, quali:- Acegi Security System fornisce tre implementazioni, quali:
* * net.sf.acegisecurity.vote.AffirmativeBased net.sf.acegisecurity.vote.AffirmativeBased – permette l'accesso se – permette l'accesso se almeno uno vota a favore;almeno uno vota a favore;
* * net.sf.acegisecurity.vote.ConsensusBased net.sf.acegisecurity.vote.ConsensusBased – permette l'accesso se tutti – permette l'accesso se tutti votano a favore;votano a favore;
net.sf.acegisecurity.AccessDecisonManager
* * net.sf.acegisecurity.vote.UnanimousBased net.sf.acegisecurity.vote.UnanimousBased – permette l'accesso se – permette l'accesso se nessuno lo nega (alcuni possono pure astenersi).nessuno lo nega (alcuni possono pure astenersi).
...come configurarlo lo avete imparato :-)...come configurarlo lo avete imparato :-)
Copyright © 2005 Emmanuele Bello - TorLUG 22
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Controllo degli accessi (2)Controllo degli accessi (2)- Definito il manager servono i Voters, ovvero gli- Definito il manager servono i Voters, ovvero gli
public interface AccessDecisionVoter {public static final int ACCESS_GRANTED = 1;public static final int ACCESS_ABSTAIN = 0;public static final int ACCESS_DENIED = -1;
public boolean supports(ConfigAttribute attribute);public boolean supports(Class clazz);public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config);
}
net.sf.acegisecurity.vote.AccessDecisionVoter
- Acegi Security System fornisce:- Acegi Security System fornisce:
net.sf.acegisecurity.vote.RoleVoter
<bean id="roleVoter"class="net.sf.acegisecurity.vote.RoleVoter"/>
...sentirete la necessità di customizzare il vostro RoleVoter!...sentirete la necessità di customizzare il vostro RoleVoter!
Copyright © 2005 Emmanuele Bello - TorLUG 23
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • ...ricordate la serratura?...ricordate la serratura?
- La sicurezza web è basata su filtri servlet.- La sicurezza web è basata su filtri servlet.
Intercettano le richieste web e applicano un certo processo Intercettano le richieste web e applicano un certo processo sicuro.sicuro.
Richiesta webRichiesta webServlet filtersServlet filters
Copyright © 2005 Emmanuele Bello - TorLUG 23-b
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• ...ricordate la serratura?...ricordate la serratura?
- I filtri servlet di Acegi Security System- I filtri servlet di Acegi Security System
* * Channel-processing filter Channel-processing filter – assicura le redirect su canale protetto (HTTPS ad esempio);– assicura le redirect su canale protetto (HTTPS ad esempio);
* * Authentication-processing filter Authentication-processing filter – accetta le richieste di autenticazione e le invia – accetta le richieste di autenticazione e le invia all'authenticatioon manager;all'authenticatioon manager;
* * CAS-processing filter CAS-processing filter – accetta tickets per le Central AuthenticaionService;– accetta tickets per le Central AuthenticaionService;
* * HTTP Basic authorization filter HTTP Basic authorization filter – processa autenticazioni basate su HTTP base;– processa autenticazioni basate su HTTP base;
* * Integration filter Integration filter – gestisce il contenitore di oggetti authentication attraverso le request;– gestisce il contenitore di oggetti authentication attraverso le request;
* * Security enforcement filter Security enforcement filter – assicura che l'utente dopo essere autenticato possa – assicura che l'utente dopo essere autenticato possa accedere alle risosrse web.accedere alle risosrse web.
Copyright © 2005 Emmanuele Bello - TorLUG 24
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • ...quindi......quindi... Request
Channel-Processing FilterChannel-Processing Filter(opzionale)(opzionale)
Authentication-Processing Authentication-Processing FilterFilter
Integration FilterIntegration Filter
Security EnforcementSecurity EnforcementFilterFilter
...trovate la sequenza sulla guida!
Copyright © 2005 Emmanuele Bello - TorLUG 25
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • ...ancora qualche concetto ......ancora qualche concetto ...- I filtri nel descrittore di deployment (web.xml) li vediamo - I filtri nel descrittore di deployment (web.xml) li vediamo dal vivo...dal vivo...
- - SecurityEnforcementFilterSecurityEnforcementFiltercapisce se la richiesta e di autenticazione o di autorizzazione e capisce se la richiesta e di autenticazione o di autorizzazione e quindi delega ai managerquindi delega ai manager.
<bean id="securityEnforcementFilter"class="net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter">
<property name="securityInterceptor"><ref bean="securityInterceptor"/>
</property>
<property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/>
</property>
</bean>
Copyright © 2005 Emmanuele Bello - TorLUG 26
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
- - FilterSecurityInterceptorFilterSecurityInterceptor
<bean id="securityInterceptor" class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager"><ref bean="authenticationManager"/>
</property>
<property name="accessDecisionManager"><ref bean="accessDecisionManager"/>
</property>
<property name="objectDefinitionSource"><value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON\A/admin/.*\Z=ROLE_ADMIN\A/student/.*\Z=ROLE_STUDENT,ROLE_ALUMNI\A/instruct/.*\Z=ROLE_INSTRUCTOR
</value></property>
</bean>
Copyright © 2005 Emmanuele Bello - TorLUG 27
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
- - AuthenticationEntryPointAuthenticationEntryPoint
<bean id="authenticationEntryPoint" class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl"><value>/jsp/login.jsp</value>
</property>
<property name="forceHttps"><value>true</value></property></bean>
<form method="POST" action="j_acegi_security_check">
<input type="text" name="j_username"><br><input type="password" name="j_password"><br><input type="submit">
</form>
Sulla pagina:Sulla pagina:
Copyright © 2005 Emmanuele Bello - TorLUG 28
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
- - AuthenticationProcessingFilterAuthenticationProcessingFilter
<bean id="authenticationProcessingFilter"class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<property name="filterProcessesUrl"><value>/j_acegi_security_check</value>
</property>
<property name="authenticationFailureUrl"><value>/jsp/login.jsp?failed=true</value>
</property>
<property name="defaultTargetUrl"><value>/</value>
</property>
<property name="authenticationManager"><ref bean="authenticationManager"/>
</property>
</bean>
Copyright © 2005 Emmanuele Bello - TorLUG 29
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
- - Authorization-Related Tag Libraries - authz.tldAuthorization-Related Tag Libraries - authz.tld
Rendono piu' facile la scrittura di pagine JSP.Rendono piu' facile la scrittura di pagine JSP.
Quali sono: AuthorizeTag, AuthenticationTag, AclTag.Quali sono: AuthorizeTag, AuthenticationTag, AclTag.
Nel web.xmlNel web.xml
<taglib> <taglib-uri>http://acegisecurity.sf.net/authz</taglib-uri> <taglib-location>/WEB-INF/authz.tld</taglib-location></taglib>
Nelle JSPNelle JSP
<authz:authorize ifAllGranted="ROLE_SUPERVISOR"> ...
JSP Page ...</authz:authorize>
Copyright © 2005 Emmanuele Bello - TorLUG 30
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Alcune features interessanti...Alcune features interessanti...- - Acegi Security System EventsAcegi Security System Events
Usati dalla classe AuthenticationProvider per informare il Usati dalla classe AuthenticationProvider per informare il sistema di cio' che accade;sistema di cio' che accade;
Catturarli è semplice...Catturarli è semplice...
...import org.springframework.context.ApplicationListener;...
public MioListener implements ApplicationListener {
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof AuthenticationFailureUsernameNotFoundEvent) {...
}}
}
Logger, UserLocker, etc.Logger, UserLocker, etc.
Copyright © 2005 Emmanuele Bello - TorLUG 31
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Alcune features interessanti...Alcune features interessanti...- - Access Control List (ACL) SecurityAccess Control List (ACL) Security
Molto interessanti per grandi applicazioniMolto interessanti per grandi applicazioni
net.sf.acegisecurity.aclnet.sf.acegisecurity.acl
Default maschera Unix-like (rwx)Default maschera Unix-like (rwx)
ACL
Authentication
MethodInvocation
DomainObject
Copyright © 2005 Emmanuele Bello - TorLUG 32
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • Alcune features interessanti...Alcune features interessanti...- - Aspect Oriented Programming (AOP)Aspect Oriented Programming (AOP)
Method Security InterceptorMethod Security Interceptor
http://aopalliance.sourceforge.net./http://aopalliance.sourceforge.net./
AspectJSecurityInterceptorAspectJSecurityInterceptor
Copyright © 2005 Emmanuele Bello - TorLUG 33
Links & co.Links & co.- Starting point- Starting point
- Papers- Papers
- Forum & ML- Forum & ML
https://appfuse.dev.java.net/https://appfuse.dev.java.net/
Acegi Security System reference: Acegi Security System reference:
http://acegisecurity.sourceforge.net/docbook/acegi.htmlhttp://acegisecurity.sourceforge.net/docbook/acegi.html
“Spring in Action”
Craig Walls, Ryan Breidenbach - Manning
http://oness.sourceforge.net/http://oness.sourceforge.net/
Forum Spring:Forum Spring:
http://forum.springframework.org/http://forum.springframework.org/
Spring Mailing List:Spring Mailing List:
https://lists.sourceforge.net/lists/listinfo/springframework-developerhttps://lists.sourceforge.net/lists/listinfo/springframework-developer
Copyright © 2005 Emmanuele Bello - TorLUG 34
Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/
• • ...vediamo il codice......vediamo il codice...
Copyright © 2005 Emmanuele Bello - TorLUG 35
DomandeDomande
Copyright © 2005 Emmanuele Bello - TorLUG
GRAZIE...GRAZIE...
Emmanuele BelloEmmanuele Bello
[email protected]@torlug.org
http://www.torlug.orghttp://www.torlug.org
[email protected]@torlug.org