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();

我试过这个解决方案:https://www.javacodegeeks.com/2014/11/spring-boot-based-websocket-application-and-capturing-http-session-id.html

但是没用。

请帮帮我!

为什么需要 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;
    }

参考:Spring Boot Websocket Example