Skip to content

Autorisations

Pour complémenter l'authentification, nous pouvons implémenter les autorisations, c'est à dire de déterminer qui a accès à quelle ressource. Pour bien sécuriser l'application ce processus se fera dans les vues et dans les contrôleurs.

Restreindre l'accès aux méthodes d'action (contrôleur)

Pour pouvoir restreindre l'accès aux différentes méthodes d'accès, il faudra tout d'abord activer la sécurité des méthodes.

  • Ajouter le décorateur @EnableMethodSecurity à la calsse de configuration de sécurité.
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class ConfigurationSecurite {
    /* ... */
}
  • Nous pouvons ensuite utiliser le décorateur @PreAuthorize aux différentes méthodes d'action que l'on veut protéger.
  • Restreindre une méthode aux utilisateurs disposant d'un certain rôle
@PreAuthorize("hasRole('ADMIN')")
  • Si on permet plusieurs rôles on utilisera plutot hasAnyRole() pour permettre une liste de rôles
@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
  • On peut également restreindre l'accès à un contrôleur complet de la même façon.
@Controller
@PreAuthorize("hasRole('ADMIN')")
public class AdminController {
    /*...*/
}

Utiliser l'authentification dans les pages JSP

Une fous l'utilisateur authentifié, on pourra récupérer ses informations de la session sécurisée. Ainsi on pourra récupérer son nom d'utilisateur et lui permettre de voir ou non certaines sections.

On pourra s'aider des balises JSP <sec>.

  • Ajouter la dépendence Maven dans le fichier pom.xml

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
    </dependency>
    

  • Dans les pages JSP on ajoute la directive taglib correspondante

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
  • Pour récupérer le nom d'utilisateur
<sec:authentication property="principal.username"/>
  • Pour limiter l'accès à une section aux utilisateurs authentifiés
<sec:authorize access="isAuthenticated()">
    Contenu accessible seulement aux utilisateurs authentifiés.
</sec:authorize>
  • Pour limiter l'accès à une section aux utilisateurs qui possèdent un rôle spécfique
<sec:authorize access="hasRole('ADMIN')">
    Contrenu disponible aux utilisateurs ayant le rôle admin seulement.
</sec:authorize>
  • Tout comme avec @PreAuthorize, on peut utiliser hasAnyRole() pour permettre l'accès à une liste de rôles.
<sec:authorize access="hasAnyRole('ADMIN', 'USER')">
    Contrenu disponible aux utilisateurs ayant le rôle admin et user seulement.
</sec:authorize>

Rappel concernant les rôles

Rappelez-vous que Spring ajout automatiquement le préfixe "ROLE_" devant le nom des rôles que l'on vérifie si on ne l'ajoute pas nous même. On peut donc utiliser "hasRole('ROLE_ADMIN')" ou "hasRole('ADMIN')" et obtenir le même résultat.