Sécuriser les points de terminaison STOMP avec Spring Security
Apprenez à authentifier et à autoriser la messagerie STOMP dans Spring, en sécurisant la négociation initiale, les destinations et les messages par utilisateur contre les accès non autorisés.
Sécuriser les points de terminaison STOMP avec Spring Security est une leçon WebSockets & Real-Time Systems with Spring gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage WebSockets & Real-Time Systems with Spring, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours WebSockets & Real-Time Systems with Spring comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Why Secure STOMP?
An open STOMP endpoint lets anyone subscribe to and publish on any destination. Securing STOMP ensures only authenticated users connect and only authorized users access specific destinations.
This lesson layers Spring Security onto STOMP messaging.
Two Layers of Security
STOMP security operates at two levels:
- Handshake: authenticate the user when the WebSocket connection opens
- Message: authorize each SUBSCRIBE and SEND to a destination
Both layers are needed for real protection.
Authenticating the Handshake
The connection should carry the user's identity. With session-based auth, Spring Security propagates the HTTP session principal into the WebSocket session automatically.
Token Auth on CONNECT
For token-based auth, read the token from the STOMP CONNECT frame headers using a ChannelInterceptor and set the authenticated principal on the message.
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor acc = StompHeaderAccessor.wrap(message);
if (StompCommand.CONNECT.equals(acc.getCommand())) {
String token = acc.getFirstNativeHeader('Authorization');
Authentication user = tokenService.validate(token);
acc.setUser(user);
}
return message;
}Authorizing Destinations
Spring provides AbstractSecurityWebSocketMessageBrokerConfigurer to define which roles may access which destinations, similar to HTTP security rules.
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages
.simpDestMatchers('/app/admin/**').hasRole('ADMIN')
.simpSubscribeDestMatchers('/topic/public').permitAll()
.anyMessage().authenticated();
}Per-User Destinations
The /user/** prefix routes messages to a single user's private queue. Spring resolves these against the authenticated principal, so users only receive their own messages.
// Server side: send to a specific user
messagingTemplate.convertAndSendToUser(
username, '/queue/notifications', payload);CSRF Considerations
The WebSocket handshake is an HTTP request and can be subject to CSRF. Validate origins and, where applicable, require a CSRF token so attackers cannot open connections from malicious pages.
Restricting Origins
Always lock down allowed origins for the STOMP endpoint. An open origin policy lets any website connect on behalf of a logged-in user.
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint('/ws')
.setAllowedOrigins('https://app.example.com')
.withSockJS();
}Validating Message Payloads
Authentication is not enough; validate the content of every message. Reject oversized payloads, unexpected fields, and malformed data to prevent injection and resource exhaustion.
- Enforce size limits
- Validate against a schema
- Reject unknown destinations
Logging Security Events
Log failed connections, denied subscriptions, and authorization failures. These events feed monitoring and help detect abuse or probing of your messaging layer.
Defense in Depth
Combine handshake auth, destination authorization, origin restriction, and payload validation. No single control is sufficient; layered controls keep your real-time messaging secure even if one fails.
Quick Check
Test your understanding of STOMP security.
Recap
You learned to secure STOMP at two layers: authenticate the handshake (session or token), then authorize destinations with Spring Security rules. Per-user destinations, origin restrictions, payload validation, and event logging together provide defense in depth for real-time messaging.
Questions Fréquemment Posées
La leçon « Sécuriser les points de terminaison STOMP avec Spring Security » est-elle gratuite ?
Oui — le texte complet de « Sécuriser les points de terminaison STOMP avec Spring Security » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours WebSockets & Real-Time Systems with Spring, passe à CoddyKit PRO. Le cours WebSockets & Real-Time Systems with Spring comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Sécuriser les points de terminaison STOMP avec Spring Security » ?
Apprenez à authentifier et à autoriser la messagerie STOMP dans Spring, en sécurisant la négociation initiale, les destinations et les messages par utilisateur contre les accès non autorisés. Tu pratiques WebSockets & Real-Time Systems with Spring avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer WebSockets & Real-Time Systems with Spring ?
Aucune expérience préalable n'est requise. WebSockets & Real-Time Systems with Spring sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Sécuriser les points de terminaison STOMP avec Spring Security » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon WebSockets & Real-Time Systems with Spring ?
Oui. Chaque leçon WebSockets & Real-Time Systems with Spring inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Présentation du protocole STOMP
- Configuration de STOMP avec Spring
- Envoi et réception de messages STOMP
- Sécuriser les points de terminaison STOMP avec Spring Security