Spring - Websockets - JSR-356

Spring - Websockets - JSR-356

我在我的应用程序中实现了 websockets。我从 jHipster 生成的应用程序复制了配置和依赖项,但出现以下错误:

java.lang.IllegalArgumentException: No 'javax.websocket.server.ServerContainer' ServletContext attribute. Are you running in a Servlet container that supports JSR-356?

org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine

我相信这些错误是套接字连接不一致的原因,因此客户端无法发送 and/or 接收任何消息。 我搜索了一个解决方案,但其他 post 没有帮助(即添加 glassfish 依赖项)。

这些是我的 ws 依赖项:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-messaging</artifactId>
        </dependency>

我是否需要包含一些其他依赖项或者是其他地方的问题?

我找到了解决方案 here。 我添加了这两个豆子:

    @Bean
    public TomcatServletWebServerFactory tomcatContainerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();;
        factory.setTomcatContextCustomizers(Collections.singletonList(tomcatContextCustomizer()));
        return factory;
    }

    @Bean
    public TomcatContextCustomizer tomcatContextCustomizer() {
        return new TomcatContextCustomizer() {
            @Override
            public void customize(Context context) {
                context.addServletContainerInitializer(new WsSci(), null);
            }
        };
    }