当前位置: 首页 > 知识库问答 >
问题:

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

汪才英
2023-03-14

登录后,webockets无法通过session.get主体()找到当前用户(返回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 Boot bug-我使用的是1.3.8版本。刷新页面后,它会正确获取登录的用户。

这是前端(订阅)

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个答案

壤驷安和
2023-03-14

为什么需要有session.getPricnpse al()。Spring提供了要在控制器中自动注入的主体对象,如下所示。

@MessageMapping("/message")
public String processMessageFromClient(@Payload String message, Principal principal) throws Exception {
        messagingTemplate.convertAndSendToUser(principal.getName(),    "/queue/reply", name);
        return name;
    }

参考:Spring Boot Websocket示例

 类似资料:
  • 问题内容: 添加Google地图视图时(我扩展了MapView,使用xml编辑器将其添加到Activity中,然后将Google Maps api键手动添加到布局xml文件中) 我的权限允许清单文件中有Internet 我想知道的是,在xml编辑器中,我收到错误“无法在当前主题中找到样式’mapViewStyle’”,但我似乎已正确设置了所有内容。 问题答案: 在遵循Android MapView

  • 问题内容: 我试图从命令promopt运行一个示例Java应用程序,但出现以下错误: 我用来尝试运行此应用的命令是: 所有相关文件都位于当前工作目录中(.java,.class和.jar文件) 我用来构建.class文件的命令如下(有2个.java文件): 再次从同一工作目录运行-的内容(或多或少): 我试图以C#开发人员的身份学习Java,所以我在编程概念方面拥有深厚的背景,整个Java工具链目

  • 我有一个问题。 我尝试使用库运行我的java程序。 当我使用 它起作用了<但是当我试图传递类路径时,它无法找到或加载主类 错误: 原因:java。lang.ClassNotFoundException:myProgram

  • 问题内容: 我正在尝试使用Gradle运行一个非常简单的项目,并在使用时遇到以下错误: 这是我的文件结构: 我排除了libs和tmp文件夹的内容,因为我认为这与该问题无关,但是我可以在需要时添加它。 这是我的build.gradle文件: 关于如何解决此问题的任何想法?我已经为mainClassName属性尝试了各种方法,但似乎没有任何效果。 问题答案: 我在这里看到两个问题,一个与另一个有关。

  • 问题内容: 我在src / main / webapp / VAADIN / themes / mytheme /中为我的VAADIN应用程序自定义了主题,文件为mytheme.scss和styles.scss。当在web.xml中将vaadin productionMode部署参数设置为false时,一切正常。当我将参数设置为true时,突然Vaadin找不到我主题的资源,并不断抱怨: 我没有/

  • 我的java应用程序编译有问题。 编译器说: