Formation Spring Boot : API REST, sécurité, Kafka et Docker

Spring Security et JWT : sécuriser une API Spring Boot

Sécurisez une API Spring Boot avec Spring Security et JWT : filtre stateless, tokens courts, refresh token, rôles et bonnes pratiques.

Réservé aux abonnés

Introduction

Spring Security est la référence pour sécuriser une API Spring Boot. Depuis la version 6, la configuration repose sur une approche 100% déclarative : SecurityFilterChain, stateless session, Bearer token, et JWT signé pour des API modernes et scalables.

Ce chapitre vous guide vers une implémentation professionnelle : architecture, filtres, tokens courts, refresh tokens sécurisés, rôles & permissions, logs, gestion des erreurs et bonnes pratiques.

Lexique essentiel

JWT

Token signé contenant l’identité et les rôles.

SecurityFilterChain

Chaîne de filtres qui sécurise les requêtes HTTP.

AuthenticationManager

Responsable de l’authentification.

UserDetailsService

Charge l’utilisateur depuis la base.

BCrypt

Algorithme de hachage sécurisé pour les mots de passe.

Stateless

Aucune session serveur → token nécessaire à chaque requête.

1. Configuration Spring Security 6 (stateless)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
@EnableMethodSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http,
                                           JwtFilter jwtFilter) throws Exception {
        return http
            .csrf(AbstractHttpConfigurer::disable)
            .sessionManagement(session -> session
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/auth/**").permitAll()
                .anyRequest().authenticated())
            .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
            .build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // indispensable pour vérifier les mots de passe hachés
    }
}

La suite de cette leçon est réservée aux abonnés

Les 3 premières leçons de chaque formation sont gratuites. Débloquez la suite pour continuer.