Spring security Spring SockJs RequestHandler不';t将连接升级到101

Spring security Spring SockJs RequestHandler不';t将连接升级到101,spring-security,spring-websocket,spring-session,Spring Security,Spring Websocket,Spring Session,尽管Spring文档中没有对此进行描述,但是websocket连接应该会导致连接升级响应(101状态) 当我将配置更改为 @Override public void configureStompEndpoints(StompEndpointRegistry registry) { registry .addEndpoint("/ws") .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatR

尽管Spring文档中没有对此进行描述,但是websocket连接应该会导致连接升级响应(101状态)

当我将配置更改为

@Override
public void configureStompEndpoints(StompEndpointRegistry registry) {
    registry
        .addEndpoint("/ws")
        .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy()))
        .setAllowedOrigins("*");
}
令我惊讶的是,调用/ws确实会导致连接升级101。我很惊讶,因为文档和所有示例都统一使用了withSockJS(),而任何websocket连接AFAIK的开始都是请求升级

我可以选择通过连接到/ws/websocket(也没有文档记录)来强制升级。所以,我不确定什么是最好的


有什么建议吗?

这是预期的行为。这就是SockJS协议的工作原理:
. 有一个初始的“问候”请求,然后客户端开始尝试一次传输一个。

我建议添加关于此的文档。对于新手来说,这是非常令人困惑的。
@Configuration
public class WebSocketSecurity extends AbstractSecurityWebSocketMessageBrokerConfigurer{

 @Override
 protected boolean sameOriginDisabled() {
    return true;
 }

    @Override
 protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
      messages
        .nullDestMatcher().permitAll()
        .simpSubscribeDestMatchers("/user/queue/errors").permitAll()
        .simpDestMatchers("/mobile-server/**").hasRole("ENDUSER")
        .simpSubscribeDestMatchers("/user/**", "/topic/**").hasRole("ENDUSER")
        .anyMessage().denyAll();
  }
}
@Override
public void configureStompEndpoints(StompEndpointRegistry registry) {
    registry
        .addEndpoint("/ws")
        .setHandshakeHandler(new DefaultHandshakeHandler(new TomcatRequestUpgradeStrategy()))
        .setAllowedOrigins("*");
}