Spring Websocket 配置:同时使用 WebSocketMessageBrokerConfigurationSupport 和 WebSocketConfigurer - 怎么样?
Spring Websocket Configuration: using WebSocketMessageBrokerConfigurationSupport and WebSocketConfigurer together - how?
我目前正在使用 class
配置我的 Spring Websocket
public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport
现在我遇到了建议
利用了
public class SampleJettyWebSocketsApplication implements WebSocketConfigurer
并覆盖
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry)
并提供
@Bean
public DefaultHandshakeHandler handshakeHandler()
请问,WebSocketConfigurer和WebSocketMessageBrokerConfigurationSupport有什么关系?换句话说,我是否可以通过第一个 class 的 API WebSocketMessageBrokerConfigurationSupport 以某种方式从 WebSocketConfigurer 实现中添加配置,以便所有配置都保留在一个文件中?
WebSocketMessageBrokerConfigurationSupport
实现是通过 @EnableWebSocketMessageBroker
配置的 DelegatingWebSocketMessageBrokerConfiguration
。您的自定义代码只需要 WebSocketMessageBrokerConfigurer
实现。那个被注入 DelegatingWebSocketMessageBrokerConfiguration
:
@Autowired(required = false)
public void setConfigurers(List<WebSocketMessageBrokerConfigurer> configurers) {
这是我的测试用例中的示例配置:
@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");
}
}
我目前正在使用 class
配置我的 Spring Websocketpublic class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport
现在我遇到了建议
利用了
public class SampleJettyWebSocketsApplication implements WebSocketConfigurer
并覆盖
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry)
并提供
@Bean
public DefaultHandshakeHandler handshakeHandler()
请问,WebSocketConfigurer和WebSocketMessageBrokerConfigurationSupport有什么关系?换句话说,我是否可以通过第一个 class 的 API WebSocketMessageBrokerConfigurationSupport 以某种方式从 WebSocketConfigurer 实现中添加配置,以便所有配置都保留在一个文件中?
WebSocketMessageBrokerConfigurationSupport
实现是通过 @EnableWebSocketMessageBroker
配置的 DelegatingWebSocketMessageBrokerConfiguration
。您的自定义代码只需要 WebSocketMessageBrokerConfigurer
实现。那个被注入 DelegatingWebSocketMessageBrokerConfiguration
:
@Autowired(required = false)
public void setConfigurers(List<WebSocketMessageBrokerConfigurer> configurers) {
这是我的测试用例中的示例配置:
@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");
}
}