Stworzyłem prostą aplikację, która wykorzystuje mechanizm websockets na wiosnę 4. Używam w mojej aplikacji brokera activemq.Wiosenny websocket z zabezpieczeniami stomp - każdy użytkownik może zasubskrybować kolejkę innych użytkowników?
W moim prosty test i utworzyć 10 wiadomości do użytkownika o nazwie "Alejandro" (user/Alejandro/kolejka/pozdrowienia)
Kiedy loguję się z "Alejandro" i zapisać się do tej kolejki:
stompClient.subscribe('/user/alejandro/queue/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
Rzeczywiście otrzymuję wszystkie 10 wiadomości, które zostały pozyskane dla alejandro.
Problem polega na tym, że loguję się z innym użytkownikiem o nazwie "evilBart" i subskrybuję kolejkę alejandro, a także otrzymuję wiadomości?
Jak mogę wymusić na tym bezpieczeństwo? Chciałbym, aby użytkownik mógł zasubskrybować tylko własną kolejkę.
Dzięki!
moja klasa config:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableStompBrokerRelay("/queue/","/topic","/user/");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello").withSockJS();
}
}
Ale to nie robi Naprawdę pomagam. Kiedy używasz 'SimpMessageTemplate.convertAndSendToUser', jeśli spojrzysz na kod, dosłownie po prostu przedrostuje"/user/{username} ", a następnie używa metody' SimpMessageTemplate.convertAndSend'. W rzeczywistości nie rozwiązuje problemu bezpieczeństwa. – Nitroware
Tak, robi to: jest to specjalna kolejka, w której unikalny identyfikator sesji użytkownika jest dołączany do miejsca docelowego i jest przezroczyście usuwany przez broker. Spróbuj go i sprawdź, czy tylko pochodzący użytkownik może odbierać wiadomości wysłane: wszystkie inne klienci nie są. –
Sprawdź więcej szczegółów i kodu w moim przykładzie tutaj: Może brakuje mi czegoś http://stackoverflow.com/questions/25004081/springmvc-websockets-messaging-user-authentication-with-spring-security | Jeśli masz rację, po prostu odpalę moje pytanie jako duplikat. – Nitroware