登录后,websockets无法通过session.getPrincipal()
找到当前用户(它返回null)。
以下是WebSockets的Java代码:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/queue", "/topic");
config.setApplicationDestinationPrefixes("/socket");
config.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/app").withSockJS();
}
}
这似乎是一个Spring Boot错误 - 我正在使用1.3.8 RELEASE
。刷新页面后,它会正确登录用户。
这是前端(订阅)
ngstomp.subscribeTo('/user/queue/message')
.callback(function(response) {
console.log('Test');
})
.withBodyInJson()
.connect();
但它不起作用。
请帮助我!
答案 0 :(得分:1)
为什么你需要session.getPricncipal()。 Spring将Principal对象自动注入控制器,如下所示。
@MessageMapping("/message")
public String processMessageFromClient(@Payload String message, Principal principal) throws Exception {
messagingTemplate.convertAndSendToUser(principal.getName(), "/queue/reply", name);
return name;
}