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
@PreAuthorizeaux différentes méthodes d'action que l'on veut protéger. - Restreindre une méthode aux utilisateurs disposant d'un certain rôle
- Si on permet plusieurs rôles on utilisera plutot
hasAnyRole()pour permettre une liste de rôles
- On peut également restreindre l'accès à un contrôleur complet de la même façon.
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 -
Dans les pages JSP on ajoute la directive
taglibcorrespondante
- Pour récupérer le nom d'utilisateur
- 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 utiliserhasAnyRole()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.