Sécurité de printemps avec thymeleaf

Sécurité de printemps avec thymeleaf

1. Vue d'ensemble

In this quick tutorial, we’ll focus on Spring Security with Thymeleaf. Nous allons créer une application Spring Boot dans laquelle nous démontrerons l’utilisation du dialecte de sécurité.

Notre choix pour la technologie frontend estThymeleaf - un moteur de création de modèles Web moderne côté serveur, avec une bonne intégration avec le framework Spring MVC. Pour plus de détails, veuillez consulter nosintro article dessus.

Enfin, Spring Security Dialect est un module supplémentaire pour Thymeleaf qui, naturellement, aide à intégrer les deux.

Nous allons utiliser le projet simple que nous avons construit dans notre article surSpring Boot tutorial; nous avons également unThymeleaf tutorial with Spring, où la configuration standard de Thymeleaf peut être trouvée.

2. Les dépendances

Tout d'abord, ajoutons la nouvelle dépendance à nos Mavenpom.xml:


    org.thymeleaf.extras
    thymeleaf-extras-springsecurity4

Il est recommandé de toujours utiliser la dernière version - que nous pouvons surmonter surMaven Central.

3. Configuration de sécurité de printemps

Ensuite, définissons la configuration de Spring Security.

Nous avons également besoin d’au moins deux utilisateurs différents pour démontrer l’utilisation du dialecte de sécurité:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    // [...]
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
      throws Exception {
        auth
          .inMemoryAuthentication()
          .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
          .and()
          .withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Comme nous pouvons le voir, dansconfigureGlobal(AuthenticationManagerBuilder auth), nous définissons deux utilisateurs avec un nom d'utilisateur et un mot de passe. Nous pouvons les utiliser pour accéder à notre application.

Nos utilisateurs ont différents rôles:ADMIN etUSER respectivement afin que nous puissions leur présenter un contenu spécifique basé sur un rôle.

4. Dialecte de sécurité

The Spring Security dialect allows us to conditionally display content based on user roles, permissions or other security expressions. Cela nous donne également accès à l'objet SpringAuthentication.

Regardons la page d'index, qui contient des exemples de dialecte de sécurité:



    
        Welcome to Spring Security Thymeleaf tutorial
    
    
        

Welcome

Spring Security Thymeleaf tutorial

Text visible to user.
Text visible to admin.
Text visible only to authenticated users.
Authenticated username:
Authenticated user roles:

On peut voir les attributs spécifiques au Spring Security Dialect:sec:authorize etsec:authentication.

Discutons-en un par un.

4.1. Comprendresec:authorize

En termes simples, nous utilisons l'attributsec:authorize pour contrôler le contenu affiché.

Par exemple, si nous voulons afficher le contenu uniquement à un utilisateur avec le rôle USER - nous pouvons faire:<div sec:authorize=”hasRole(‘USER')”>.

Et si nous voulons élargir l'accès à tous les utilisateurs authentifiés, nous pouvons utiliser l'expression suivante:

.

4.2. Comprendresec:authentication

L'interface de Spring SecurityAuthenticationexpose des méthodes utiles concernant le principal authentifié ou la demande d'authentification.

Pouraccess an authentication object withing Thymeleaf, on peut simplement utiliser<div sec:authentication=”name”> ou<div sec:authentication=”principal.authorities”>.

Le premier nous donne accès au nom de l'utilisateur authentifié, le dernier nous permet d'accéder aux rôles de l'utilisateur authentifié.

5. Sommaire

Dans cet article, nous avons utilisé le support Spring Security dans Thymeleaf, dans une simple application Spring Boot.

Comme toujours, une version fonctionnelle du code présenté dans cet article est disponible dans nosGitHub repository.