You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:52:40