Spring6/Spring Boot3中如何自定义Jetty WebSocketPolicy?
Spring 6/Spring Boot 3 中自定义 Jetty WebSocketPolicy 的方法
旧版本实现回顾
在Spring旧版本中,可通过JettyRequestUpgradeStrategy的带参构造函数直接传入自定义WebSocketPolicy:
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").setHandshakeHandler(handshakeHandler()); registry.addEndpoint("/ws").setHandshakeHandler(handshakeHandler()).withSockJS(); } @Bean public DefaultHandshakeHandler handshakeHandler() { WebSocketPolicy policy = WebSocketPolicy.newServerPolicy(); policy.setMaxTextMessageSize(128 * 1024); return new DefaultHandshakeHandler(new JettyRequestUpgradeStrategy(policy)); } }
但Spring 6/Spring Boot 3中,JettyRequestUpgradeStrategy的该构造函数已被移除,需采用新的配置方式。
新版本适配方案
可以通过自定义JettyWebSocketServerContainerFactoryBean配置WebSocketPolicy,再关联到JettyRequestUpgradeStrategy中,具体实现如下:
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").setHandshakeHandler(customHandshakeHandler()); registry.addEndpoint("/ws").setHandshakeHandler(customHandshakeHandler()).withSockJS(); } @Bean public DefaultHandshakeHandler customHandshakeHandler() { return new DefaultHandshakeHandler(customJettyRequestUpgradeStrategy()); } @Bean public JettyRequestUpgradeStrategy customJettyRequestUpgradeStrategy() { return new JettyRequestUpgradeStrategy(customWebSocketServerContainerFactoryBean().getWebSocketServerFactory()); } @Bean public JettyWebSocketServerContainerFactoryBean customWebSocketServerContainerFactoryBean() { JettyWebSocketServerContainerFactoryBean factoryBean = new JettyWebSocketServerContainerFactoryBean(); // 配置自定义WebSocketPolicy WebSocketPolicy policy = WebSocketPolicy.newServerPolicy(); policy.setMaxTextMessageSize(128 * 1024); // 将自定义策略绑定到WebSocketServerFactory factoryBean.getWebSocketServerFactory().setPolicy(policy); return factoryBean; } }
关键说明
JettyWebSocketServerContainerFactoryBean是Spring提供的Jetty WebSocket容器配置工厂Bean,通过它可获取WebSocketServerFactory实例- 在工厂Bean中创建并配置自定义
WebSocketPolicy,再将其设置到WebSocketServerFactory中 - 最后将配置完成的
WebSocketServerFactory传入JettyRequestUpgradeStrategy构造函数,关联到DefaultHandshakeHandler即可生效
内容的提问来源于stack exchange,提问作者rento
相关产品推荐
相关产品推荐

