Spring Boot WebSockets无法找到当前用户(主体)

时间:2017-02-05 02:41:40

标签: spring spring-boot spring-security spring-websocket

登录后,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();

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

但它不起作用。

请帮助我!

1 个答案:

答案 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;
    }

参考:Spring Boot Websocket Example