Spring Websocket 配置:一起使用 WebSocketMessageBrokerConfigurationSupport 和 WebSocketConfigurer - 如何?

Ask*_*mov 5 spring jetty websocket spring-websocket java-websocket

我目前正在使用该类配置我的 Spring Websocket

public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport
Run Code Online (Sandbox Code Playgroud)

现在我遇到了建议 Spring STOMP Websockets: any way to enable permessage-deflate on server side?

这利用

public class SampleJettyWebSocketsApplication implements WebSocketConfigurer 
Run Code Online (Sandbox Code Playgroud)

并覆盖

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry)
Run Code Online (Sandbox Code Playgroud)

并提供

@Bean
public DefaultHandshakeHandler handshakeHandler() 
Run Code Online (Sandbox Code Playgroud)

问题,WebSocketConfigurerWebSocketMessageBrokerConfigurationSupport是什么关系?换句话说,我是否可以通过第一类 WebSocketMessageBrokerConfigurationSupport 的 API 从 WebSocketConfigurer 实现中添加配置,以便所有配置都保留在一个文件中?

Art*_*lan 2

实现WebSocketMessageBrokerConfigurationSupportDelegatingWebSocketMessageBrokerConfiguration通过配置的@EnableWebSocketMessageBroker。您在自定义代码中所需要的只是WebSocketMessageBrokerConfigurer实现。那个被注入DelegatingWebSocketMessageBrokerConfiguration

@Autowired(required = false)
public void setConfigurers(List<WebSocketMessageBrokerConfigurer> configurers) {
Run Code Online (Sandbox Code Playgroud)

这是我的测试用例中的示例配置:

@Configuration
@EnableWebSocketMessageBroker
static class ServerConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Bean
    public DefaultHandshakeHandler handshakeHandler() {
        return new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy());
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws")
                .setHandshakeHandler(handshakeHandler())
                .setAllowedOrigins("http://foo.com")
                .addInterceptors(new HandshakeInterceptor() {

                    @Override
                    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
                            WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
                        return request.getHeaders().getOrigin() != null;
                    }

                    @Override
                    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
                            WebSocketHandler wsHandler, Exception exception) {

                    }

                })
                .withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry configurer) {
        configurer.setApplicationDestinationPrefixes("/app")
                .enableSimpleBroker("/topic", "/queue");
    }


}
Run Code Online (Sandbox Code Playgroud)