22/09/2016 OSSGTP - Présentation Spring 1 Sommaire Architectures en couches et conteneurs légers Spring Spring Core Spring AOP Accès aux données Gestion transactionnelle MVC Sécurité
22/09/2016 OSSGTP - Présentation Spring 2 Acegi Acegi (Spring Security) est le sous-projet de Spring adressant la sécurité des applications Java/J2EE: Solution très modulaire et indépendante de J2EE; Possibilité de se baser sur les services des serveurs d’application en matière de sécurité; Solution peu intrusive pour l’application cible; Plusieurs implémentations suivant la stratégie de sécurité choisie (DAO/JDBC, LDAP, CAS…). Basé sur des intercepteurs (filtres servlet et intercepteurs AOP).
22/09/2016 OSSGTP - Présentation Spring 3 Principe (1/2) Application de la sécurité Présentation Application Services (métier) Accès aux données (DAO) Persistence Pattern MVCMismatch Paradigm Transactions Authentification / autorisations Exceptions Interceptions Contexte de sécurité Taglibs Acegi Filtres servlet; Intercepteurs AOP; Taglibs pour la présentation.
22/09/2016 OSSGTP - Présentation Spring 4 Principe (2/2) Découplage des préoccupations: Application transparente de la sécurité (approche non intrusive basée sur l’interception des traitements); Récupération des informations pour l’authentification; Gestion de l’authentification; Facilités pour gérer un contexte de sécurité pour le fil d’exécution; Gestion des autorisations; Support pour la couche présentation. Interceptions avec: Filtres servlet; Intercepteurs AOP. Support pour la couche présentation: Taglibs.
22/09/2016 OSSGTP - Présentation Spring 5 Interceptions - Filtres (1/2) Interceptions par des filtres sur lesquels peuvent injecter différentes informations: Utilisation de la classe DelegatingFilterProxy; Plusieurs types de filtres prédéfinis: Chargement des informations dans le contexte pour le fil d’exécution (classe HttpSessionContextIntegrationFilter); Authentification (classe spécifique pour le type d’authentification: AuthenticationProcessingFilter, CasProcessingFilter, BasicProcessingFilter, HttpRequestIntegrationFilter, JBossIntegrationFilter); Vérification de l’authentification et des autorisations (classe SecurityEnforcementFilter). L’ordre des filtres très important. Celui-ci correspond à l’ordre de l’énumération ci-dessus.
22/09/2016 OSSGTP - Présentation Spring 6 Acegi HTTP Request Security Filter org.springframework.web.filter.DelegatingFilterProxy targetClass net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter Acegi Filter Chain Proxy /* Interceptions - Filtres (2/2) Exemple de configuration de filtres: web.xml
22/09/2016 OSSGTP - Présentation Spring 7 Interceptions - AOP (1/2) Les interceptions basées sur l’AOP pour la gestion des autorisations: Intercepteur AOP FilterSecurityInterceptor. Le filtre est encapsulé dans le filtre SecurityEnforcementFilter. Utilisation directe de l’intercepteur au niveau de la couche service métier.
22/09/2016 OSSGTP - Présentation Spring 8 Interceptions - AOP (2/2) Exemple de configuration d’intercepteurs: applicationContext.xml <bean id="securityInterceptor" class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor">... <bean id="monBean" class="org.springframework.aop.framework.ProxyFactoryBean"> IMonBean securityInterceptor
22/09/2016 OSSGTP - Présentation Spring 9 Gestion de l’authentification (1/3) Pour une certaine URI, le filtre d’authentification est activé et il réalise les traitements suivants: Extraction des données d’authentification de la requête; Création d’une implémentation de l’interface Authentication avec ces données; Délégation de l’authentification au fournisseur d’authentification. Application Services (métier) Accès aux données (DAO) Persistence Mismatch Paradigm Init Contexte Contexte transactionnel Authentification Vérification Sécurité Authentication Filter Authentication Manager
22/09/2016 OSSGTP - Présentation Spring 10 Gestion de l’authentification (2/3) Configuration du module d’authentification: applicationContext.xml... <bean id="authenticationManager" class="net.sf.acegisecurity.providers.ProviderManager"> <bean id="jdbcAuthenticationDao" class="net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl"> <bean id="daoAuthenticationProvider" class="net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider">... Configuration du gestionnaire de fournisseurs d’authentification Configuration du fournisseurs d’authentification basé sur le pattern DAO
22/09/2016 OSSGTP - Présentation Spring 11 Gestion de l’authentification (3/3) Configuration du filtre: applicationContext.xml... <bean id="authenticationProcessingFilter" class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> /login.jsp?login_error=1 / /j_login... Gestionnaire d’authentification utilisé URI de redirection en cas d’erreur URI de redirection par défaut en cas de succès URI d’activation du filtre
22/09/2016 OSSGTP - Présentation Spring 12 Gestion des autorisations (1/3) Pour toutes les URIs, le filtre d’authentification est activé et il réalise les traitements suivants: Vérification que l’utilisateur de l’application est bien authentifié; Vérification que l’URI correspond aux URI à protéger; Si tel n’est pas le cas, aucune vérification de droits n’est réalisée; Si tel est le cas, une vérification de droits est réalisée par un gestion de décision; Contexte transactionnel Application Services (métier) Accès aux données (DAO) Persistence Mismatch Paradigm Init Contexte Authentification Vérification Sécurité Security Filter Authentication Manager Decision Manager
22/09/2016 OSSGTP - Présentation Spring 13 Gestion des autorisations (2/3) Configuration du module de sécurité: applicationContext.xml... /j_login false CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /form*=ROLE_ADMIN... Configuration du point d’entrée pour l’authentification Configuration de l’intercepteur de sécurité permettant de spécifier les ressources à protéger Configuration d’un votant Configuration du gestionnaire de décision basé sur un ou plusieurs votants et une stratégie de vote
22/09/2016 OSSGTP - Présentation Spring 14 Gestion des autorisations (3/3) Configuration du filtre: applicationContext.xml... <bean id="securityEnforcementFilter" class="com.sgam.websup.authentification.acegi.web.SecurityEnforcementFilter">... Intercepteur de sécurité utilisé Point d’entrée pour l’authentification
22/09/2016 OSSGTP - Présentation Spring 15 SecurityChannel (1/3) Objectif: forcer l’accès à une ressource avec un protocole de transport spécifique tel que HTTP ou HTTPS. Si tel n’est pas le cas, une redirection absolue est effectué en se basant sur un mappage de ports. Mise en œuvre: Filtre (classe ChannelProcessingFilter) dédiée à placer en début de la chaîne des filtres Configuration similaire à celles vues précédemment pour bénéficier de l’injection de dépendance.
22/09/2016 OSSGTP - Présentation Spring 16 SecurityChannel (2/3) Exemple de configuration: CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON \A/secure/.*\Z=REQUIRES_SECURE_CHANNEL \A/acegilogin.jsp.*\Z=REQUIRES_SECURE_CHANNEL \A/j_acegi_security_check.*\Z=REQUIRES_SECURE_CHANNEL \A.*\Z=REQUIRES_INSECURE_CHANNEL Gestionnaire de décision Configuration du channel pour les différentes ressources en fonction de leurs URI Configuration des différents channels possibles: - secureChannelProcessor déclenché avec la propriété REQUIRES_SECURE_CHANNEL; - insecureChannelProcessor déclenché avec la propriété REQUIRES_INSECURE_CHANNEL. applicationContext.xml
22/09/2016 OSSGTP - Présentation Spring 17 SecurityChannel (3/3) Exemple de configuration (suite): Spécification du point d’entrée à utiliser pour la redirection Spécification du mappage des ports à utiliser pour la redirection en utilisant HTTPS Propriétés du mappage des ports Configuration de secureChannelProcessor Configuration de insecureChannelProcessor applicationContext.xml
22/09/2016 OSSGTP - Présentation Spring 18 Support pour la couche présentation Acegi offre un support pour la couche présentation avec des taglibs dédiés: Se basent sur le contexte de sécurité pour le fil d’exécution; Plusieurs types de taglibs: Affichage dans les pages JSP suivant les rôles; Affichage d’informations d’authentification (principal…). Exemple d’utilisation dans une page JSP: My text for the role USER My text for the role ADMIN
22/09/2016 OSSGTP - Présentation Spring 19 Autres fonctionnalités Acegi supporte également: L’authentification / les autorisations basées sur un serveur d’application (Tomcat, Jetty, Jboss, Resin) Plusieurs types d’authentification (HTTP Form, HTTP Basic, HTTP Digest, Anonymous, certificat X509); SSO basé sur CAS. Attention, dans les versions 0.8.*, Acegi exécute systématiquement une réauthentification avec l’intercepteur de sécurité. Pour pallier à cela, il est nécessaire de mettre en place un cache (sur l’object Authentication). Ce mécanisme est modifié dans les version 0.9.* où Acegi laisse le choix de la stratégie choisie (réauthentification ou non).
22/09/2016 OSSGTP - Présentation Spring 20 A vous de jouer…