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.
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.
Déjà abonné ? Se connecter
