Nous allons définir la configuration des accès selon les profils, la gestion de la sécurité en CI en évitant notamment les alertes CodeQL via la configuration de SecurityConfig, nous ferons les vérifications et résultats attendus, ainsi que, en bonus, l'ajout des informations Git dans l'endpoint actuator/info et l'utilisation d'Actuator pour diagnostiquer l'application.
Spring Boot Actuator est un sous-projet essentiel qui fournit des fonctionnalités «production-ready» pour surveiller et piloter l'application
Au lieu de développer des interfaces de monitoring sur mesure, Actuator expose automatiquement des endpoints HTTP ou JMX permettant
d'observer l'état interne de l'application en temps réel
Nous allons ajouter les configurations nécessaires pour exploiter les endpoints Actuator
Actuator doit être présent dans tous les environnements. En revanche, les endpoints exposés doivent varier selon le profil.
➜ Dépendances communes → présentes dans toutes les branches
➜ Sécurité et exposition → pilotées par les profils (application-*.properties)
Liste des endpoints disponibles : curl -s http://localhost:{port}/actuator
| profil | dev | staging | prod |
|---|---|---|---|
| actuator/health | Public | Public | Public |
| actuator/info | Public | Public | Public |
| actuator/metrics | Accès restreint | Accès restreint | |
| actuator/env | Accès restreint | Accès restreint | |
| actuator/mappings | Accès restreint |
/actuator/info est utile surtout en dev. En staging/prod: on évites d'exposer des métadonnées
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Sans cette dépendance, les endpoints /actuator/ n'existent pas<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Permet de sécuriser les endpoints sensibles et d'éviter l'alerte CodeQL# actuator info
spring.application.name=flashcards
info.app.name=Flashcards
info.app.version=1.0.0
info.app.description=Flashcards API
info.env.spring.profiles.active=${spring.profiles.active}
# endpoint enable
management.info.env.enabled=true
management.info.build.enabled=true
management.endpoint.health.show-details=when-authorized
# admin by default
spring.security.user.name=admin
spring.security.user.roles=ADMIN
Ajouter les configurations communes dans ce fichier
spring.application.name est l'identifiant technique
info.app.name est le nom lisible exposé via Actuator
L'utilisateur admin pourra se connecter au endpoints restreints grâce
à la class SecurityConfig définie plus bas
Le profil dev: application-dev.properties
# actuator endpoints
management.endpoints.web.exposure.include=health,info,metrics,mappings,env
Le profil staging: application-staging.properties
info.app.environment=staging
# endpoint enable
management.endpoints.web.exposure.include=health,info,metrics,env
management.info.java.enabled=false
Le profil prod: application-prod.properties
management.endpoints.web.exposure.include=health,info
# endpoint enable
management.endpoint.health.probes.enabled=true
management.endpoint.health.show-details=never
management.endpoint.env.enabled=false
management.info.env.enabled=false
management.info.build.enabled=true
Les fichiers profils écrasent la configuration commune
Dans tous les fichiers de profil: Incluez explicitement, les endpoints désirés avec management.endpoints.web.exposure.include
Exposed Spring Boot actuators in configuration file
Open in main 17 hours ago
Speed up the remediation of this alert with Copilot Autofix for CodeQL
Code snippet
pom.xml:75
</dependency>
<!-- Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Insecure Spring Boot actuator configuration exposes sensitive endpoints.
Rule
Tool CodeQL
Rule ID java/spring-boot-exposed-actuators-config
Query View source
Description
Spring Boot includes features called actuators that let you monitor and interact with your web application.
Exposing unprotected actuator endpoints through configuration files can lead to information disclosure or even to remote code execution.
Pour résoudre l'alerte CodeQL "java/spring-boot-exposed-actuators-config",
il faut ajouter la dépendance "Spring Security" pour sécuriser automatiquement les endpoints Actuator. Et, configurer les expositions de manière restrictive dans les fichiers de propriétés
Objectif: Autoriser /health publiquement et restreindre les autres endpoints au rôle ADMIN
@Configuration
@EnableWebSecurity
public class ActuatorSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.securityMatcher(EndpointRequest.toAnyEndpoint())
.authorizeHttpRequests(authz -> authz
.requestMatchers(EndpointRequest.to("health")).permitAll()
.anyRequest().hasRole("ADMIN")
)
.httpBasic(Customizer.withDefaults());
return http.build();
}
}
Retrouvez le code complet de ce script, dans le repository Flashcards
Dans la CI: La variable SPRING_SECURITY_PSWD est définie dans les secrets Github
SPRING_SECURITY_PSWD=your-secret
./mvnw spring-boot:run
Voir le readme pour + d'informations Les checks dans la PR sont au vert
Pas d'alerte dans le projet Github: → security/code-scanning

| endpoints | develop :8080 | staging :8081 | main :8080 |
|---|---|---|---|
|
PUBLIC health |
Résultat:
{
"status": "UP"
}
|
Résultat:
{
status: "UP",
groups: [
"liveness",
"readiness"
]
} |
|
|
PUBLIC info |
dev/prod:
staging:
Prod:
{
app: {
environment: "prod",
name: "Flashcards",
version: "1.0.0",
description: "Flashcards API"
},
env: {
spring: {
profiles: {
active: "prod"
}
}
}
} Tous, partagent ces informations:
name: "Flashcards",
version: "1.0.0",
description: "Flashcards API" Les informations changent suivant l'environement et le profil
app: {
environment: "staging", //...
env: {
spring: {
profiles: {
active: "staging"
} |
||
RESTRICTED ACESS Nécessite d'utiliser l'utilisateur «admin»
| metrics |
Plus facile à lire dans le navigateur, il renvoie la liste des métriques disponibles |
|
| env |
Affiche toutes les sources de configuration et leurs valeurs effectives |
|
| mappings (dev only) |
Donne le contexte, le mapping de tous les endpoints disponibles par environement |
|
management.info.git.enabled=true
{
git: {
branch: "feature/add-actuator",
commit: {
id: "e7fa488",
time: "2026-02-12T19:03:28Z"
}
}
}
La solution est l'utilisation du SHA Git qui est unique et immuable
Actuator permet d'inspecter une application en production, sans redémarrage
/metrics/jvm.memory.used
/metrics/jvm.memory.max
Détecte les fuites mémoire/metrics/hikaricp.connections.active
/metrics/hikaricp.connections.idle
Connexions saturées ou bloquées/metrics/http.server.requests
/metrics/http.server.requests?tag=uri:/api/flashcards
Filtre par endpoint avec ?tag=uri:metrics/jvm.threads.live
Détecte les thread leaks et les blocages (via Micrometer)curl -X POST -H "Content-Type: application/json" \
-d '{"configuredLevel": "DEBUG"}' \
http://your-app/actuator/loggers/com.yourprojet.service
/actuator/env
/actuator/configprops
/actuator/conditions
GET /actuator/heapdump
Analyser le fichier .hprof en examinant l'état du tas (heap) JavaGET /actuator/threaddump
Identifier les threads en état BLOCKED ou WAITING Actuator est utilisé par les outils de CI/CD et les systèmes de supervision (Prometheus, Grafana, K8s) pour vérifier si une application est prête à être déployée,
si elle est en bonne santé (healthcheck), ou pour afficher des tableaux de bord de performance.
En résumé; Actuator est dans l'application, mais il est conçu pour le monitoring et les pipelines CI/CD (DevOps)