Files
btpxpress-frontend/FIX_431_ERROR.md
dahoud b749f2df37 feat: Migration complète vers Quarkus PrimeFaces Freya
Migration du frontend React/Next.js vers Quarkus + PrimeFaces Freya 5.0.0

Dashboard:
- Extension de BtpXpressApiClient avec tous les endpoints dashboard
- Création de DashboardService pour récupérer les données API
- Refactorisation DashboardView : uniquement données réelles de l'API
- Restructuration dashboard.xhtml avec tous les aspects métiers BTP
- Suppression complète de toutes les données fictives

Topbar:
- Amélioration du menu profil utilisateur avec header professionnel
- Ajout UserSessionBean pour gérer les informations utilisateur
- Styles CSS personnalisés pour une disposition raffinée
- Badges de notifications conditionnels

Configuration:
- Intégration du thème Freya 5.0.0-jakarta
- Configuration OIDC pour Keycloak (security.lions.dev)
- Gestion des erreurs HTTP 431 (headers size)
- Support du format Fcfa avec séparateurs d'espaces

Converters:
- Création de FcfaConverter pour formater les montants en Fcfa avec espaces (x xxx xxx format)

Code Quality:
- Code entièrement documenté en français avec Javadoc exemplaire
- Respect du principe Java 'Write once, use many times'
- Logging complet pour le débogage
- Gestion d'erreurs robuste
2025-11-01 19:55:30 +00:00

76 lines
2.5 KiB
Markdown

# Solution pour l'erreur HTTP 431 "Request Header Fields Too Large"
## Problème
L'erreur 431 se produit lorsque les en-têtes HTTP (notamment les cookies contenant les tokens OIDC/JWT) dépassent la taille maximale autorisée.
## Solutions appliquées
### 1. Configuration Quarkus HTTP
```properties
quarkus.http.max-headers-size=64K
quarkus.vertx.max-headers-size=64K
```
### 2. Optimisation OIDC Token Management
```properties
quarkus.oidc.token-state-manager.split-tokens=true
quarkus.oidc.token-state-manager.strategy=id-refresh-tokens
quarkus.oidc.token-state-manager.encryption-required=false
quarkus.oidc.token-state-manager.cookie-max-size=8192
```
Ces configurations :
- **split-tokens** : Divise les tokens en plusieurs cookies pour éviter qu'un seul cookie soit trop volumineux
- **id-refresh-tokens** : Utilise une stratégie optimisée avec refresh tokens
- **encryption-required=false** : Désactive l'encryption pour réduire la taille (développement uniquement)
- **cookie-max-size=8192** : Limite la taille d'un cookie individuel à 8KB
## Actions à effectuer
### ⚠️ IMPORTANT : Supprimer les cookies du navigateur
Les cookies existants peuvent être trop volumineux. Vous devez :
1. **Ouvrir les outils développeur** (F12)
2. **Onglet Application > Cookies**
3. **Supprimer tous les cookies** pour `http://localhost:8081`
4. **Redémarrer l'application Quarkus**
5. **Recharger la page**
Ou via la console du navigateur :
```javascript
// Supprimer tous les cookies pour localhost:8081
document.cookie.split(";").forEach(c => {
document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/");
});
```
### Redémarrer l'application
Après modification de `application.properties`, vous **devez redémarrer** l'application Quarkus :
```bash
# Arrêter l'application (Ctrl+C)
# Puis relancer
mvn quarkus:dev
```
## Vérification
Une fois les cookies supprimés et l'application redémarrée :
1. Accédez à http://localhost:8081/dashboard.xhtml
2. Vous serez redirigé vers Keycloak pour l'authentification
3. Après authentification, les nouveaux cookies (optimisés) seront créés
## Si le problème persiste
1. **Augmenter encore la limite** :
```properties
quarkus.http.max-headers-size=128K
quarkus.vertx.max-headers-size=128K
```
2. **Vérifier dans Keycloak** que le client `btpxpress-frontend` n'a pas trop de claims/roles qui gonflent le token
3. **Mode navigation privée** : Tester dans une fenêtre de navigation privée pour éviter les cookies existants