Tôi đã tạo một ứng dụng đơn giản sử dụng cơ chế websockets của mùa xuân 4. Tôi sử dụng trong ứng dụng của mình là nhà môi giới activemq.Spring websocket với bảo mật stomp - mọi người dùng đều có thể đăng ký bất kỳ hàng đợi người dùng nào khác?
Trong thử nghiệm đơn giản của tôi tạo ra 10 tin nhắn cho một người dùng có tên "Alejando" (user/alejandro/đợi/lời chào)
Khi tôi đăng nhập với "Alejando" và đăng ký xếp hàng rằng:
stompClient.subscribe('/user/alejandro/queue/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
Tôi thực sự nhận được tất cả 10 tin nhắn đã được enqued cho alejandro.
Vấn đề là khi tôi đăng nhập bằng một người dùng khác có tên "evilBart" và đăng ký hàng đợi của alejandro tôi cũng nhận được thư?
Tôi có thể thực thi bảo mật cho điều đó bằng cách nào? Tôi muốn rằng người dùng chỉ có thể đăng ký hàng đợi của chính nó.
Cảm ơn!
lớp cấu hình của tôi:
@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();
}
}
Nhưng điều đó không 't thực sự giúp đỡ. Khi bạn sử dụng 'SimpMessageTemplate.convertAndSendToUser', nếu bạn nhìn vào mã, nó theo nghĩa đen chỉ là tiền tố '/ user/{username}' và sau đó sử dụng phương thức' SimpMessageTemplate.convertAndSend'. Nó không thực sự giải quyết vấn đề an ninh. – Nitroware
Có, nó có: đó là một hàng đợi đặc biệt trong đó một sessionId duy nhất của người dùng được nối vào đích và được người môi giới loại bỏ một cách rõ ràng. Thử và xác minh rằng chỉ người dùng có thể nhận được thư được gửi ở đó: tất cả khách hàng thì không. –
Xem thêm chi tiết và mã trong ví dụ của tôi tại đây: Có thể tôi thiếu một số thứ http://stackoverflow.com/questions/25004081/springmvc-websockets-messaging-user-authentication-with-spring-security | Nếu bạn đúng, tôi sẽ chỉ nuke câu hỏi của tôi như là một bản sao. – Nitroware