我创建了一个简单的应用程序,使用 spring 4 的 websockets 机制。
我在我的应用程序中使用 activemq 代理。
在我的简单测试中,我为名为“Alejando”的用户创建 10 条消息 (user/alejandro/queue/greetings)
当我使用“Alejando”登录并订阅该队列时:
stompClient.subscribe('/user/alejandro/queue/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
我确实收到了为 alejandro 查询的所有 10 条消息。
问题是,当我使用名为“evilBart”的不同用户登录并订阅 alejandro 队列时,我也会收到消息吗?
我该如何为此加强安全性?我希望用户只能订阅它自己的队列。
Thanks!
我的配置类:
@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();
}
}
您可以采取两种选择。
- 只需从 config.enableStompBrokerRelay 中删除“/user/”即可。
Spring消息会自动添加前缀。
ConvertAndSendToUser 不适用于代理中继。
请参阅 org.springframework.messaging.simp.user 包源 https://github.com/spring-projects/spring-framework/tree/master/spring-messaging/src/main/java/org/springframework/messaging/simp/user
默认用户前缀是“/user/”。
您可以使用 config.setUserDestinationPrefix() 更改它
2.重写两个方法,从ChannelInterceptor中处理
方法:
配置客户端入站通道
配置客户端出站通道
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)