Spring 启动 WebSockets 无法找到当前用户(主体)
Spring Boot WebSockets unable to find the current user (principal)
登录后,websockets无法通过session.getPrincipal()
找到当前用户(它returns null)。
这是 WebSocket 的 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 引导错误 - 我正在使用 1.3.8 RELEASE
。刷新页面后,正确获取登录用户
这是前端(订阅)
ngstomp.subscribeTo('/user/queue/message')
.callback(function(response) {
console.log('Test');
})
.withBodyInJson()
.connect();
但是没用。
请帮帮我!
为什么需要 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;
}
登录后,websockets无法通过session.getPrincipal()
找到当前用户(它returns null)。
这是 WebSocket 的 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 引导错误 - 我正在使用 1.3.8 RELEASE
。刷新页面后,正确获取登录用户
这是前端(订阅)
ngstomp.subscribeTo('/user/queue/message')
.callback(function(response) {
console.log('Test');
})
.withBodyInJson()
.connect();
但是没用。
请帮帮我!
为什么需要 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;
}