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

Spring Stomp WebSocket连接报错400 BAD_REQUEST求助

Spring Stomp WebSocket连接返回400错误排查

开发了一个基于Spring的Stomp WebSocket应用,使用Postman或wscat尝试连接时,收到错误提示:error : Unexpected server response : 400。注册、登录等其他端点均可正常工作,已在securityFilterChain和OncePerRequestFilter中添加大量日志,但未找到导致400响应的有效信息。

WebSocketConfig配置

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    System.out.println("Registering Stomp Endpoints");
    try {
        registry.addEndpoint("/chat-service")
                .setAllowedOrigins("*")
                .addInterceptors(new HandshakeDebugInterceptor())
                .withSockJS();
        System.out.println("Stomp Endpoints Registered Successfully");
    } catch (Exception e) {
        System.out.println("Error registering Stomp Endpoints: " + e.getMessage());
    }
}

SecurityConfiguration配置

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .csrf(AbstractHttpConfigurer::disable)
            .cors(Customizer.withDefaults())
            .authorizeHttpRequests((authorize) -> {
                        authorize
                                .requestMatchers("/api/auth/*").permitAll()
                                .requestMatchers("/chat-service/**").permitAll()
                                .requestMatchers("/admin/**").hasRole("ADMIN")
                                //.anyRequest().authenticated();
                                .anyRequest().permitAll();
                    }
            )
            .sessionManagement((configurer) -> {
                configurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
            })
            .authenticationProvider(authenticationProvider)
            .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
            .logout(Customizer.withDefaults()
            );

            http.addFilterBefore((request, response, chain) -> {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                HttpServletResponse httpResponse = (HttpServletResponse) response;
                System.out.println("Request to: " + httpRequest.getRequestURI());
                System.out.println("Method: " + httpRequest.getMethod());
                System.out.println("Headers: " + httpRequest.getHeaderNames());
                System.out.println("User Principal: " + httpRequest.getUserPrincipal());
                System.out.println("Authentication: " + SecurityContextHolder.getContext().getAuthentication());
                chain.doFilter(httpRequest, httpResponse);
            }, UsernamePasswordAuthenticationFilter.class);

    return http.build();
}

使用wscat连接时的服务器日志

执行命令:wscat -c ws://localhost:8081/chat-service,服务器日志如下:

: Securing GET /chat-service
Request to: /chat-service
Method: GET
Headers: org.springframework.security.web.firewall.StrictHttpFirewall$StrictFirewalledRequest$2@5118325e
User Principal: null
Authentication: null
2024-04-01T21:11:26.365+03:00 DEBUG 21456 --- [messenger] [nio-8081-exec-7] o.s.s.w.a.AnonymousAuthenticationFilter  : Set SecurityContextHolder to anonymous SecurityContext
2024-04-01T21:11:26.366+03:00 DEBUG 21456 --- [messenger] [nio-8081-exec-7] o.s.security.web.FilterChainProxy      
  : Secured GET /chat-service
2024-04-01T21:11:26.367+03:00  INFO 21456 --- [messenger] [nio-8081-exec-7] c.m.m.c.RequestResponseLoggingFilter   
  : Request: GET /chat-service
2024-04-01T21:11:26.367+03:00 DEBUG 21456 --- [messenger] [nio-8081-exec-7] o.s.web.servlet.DispatcherServlet      
  : GET "/chat-service", parameters={}
2024-04-01T21:11:26.368+03:00 DEBUG 21456 --- [messenger] [nio-8081-exec-7] o.s.web.servlet.DispatcherServlet      
  : Completed 400 BAD_REQUEST
2024-04-01T21:11:26.369+03:00  INFO 21456 --- [messenger] [nio-8081-exec-7] c.m.m.c.RequestResponseLoggingFilter   
  : Response: 400 null

内容的提问来源于stack exchange,提问作者Anatoliy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:51:04