WebSocketConfig.java

package com.oliwier.listmebackend.config;

import com.oliwier.listmebackend.websocket.DeviceHandshakeInterceptor;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
@RequiredArgsConstructor
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    private final DeviceHandshakeInterceptor deviceHandshakeInterceptor;

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // /topic/** = server-to-client broadcasts (pub/sub)
        registry.enableSimpleBroker("/topic");
        // /app/**  = client-to-server messages handled by @MessageMapping methods
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws")
                .addInterceptors(deviceHandshakeInterceptor)
                .setAllowedOriginPatterns("*")
                .withSockJS();
    }
}