WebSocket连接错误的解决方案
一、前言
使用websocket进行实时通信时,常见以下报错:
WebSocket connection to 'ws://localhost' failed:
或者
Whoops!Lost connection to http://localhost:
网上很多方案例如重新导入fastjson依赖、缺少证书等方案都无法解决问题,以下是本人经过websocket多日折磨后总结出来的错误原因以及解决方案。
二、错误及其解决方案
1、使用ServerEndpointExporter但没用使用外置tomcat容器
这个错误应该是最常见且最不容易发现的,因为它藏得实在太深了,博主也是受困多日才发现错误
错误原因:ServerEndpointExporter需要外置tomcat容器运行环境,但平常我们都是使用SpringBoot内置tomcat,导致ServerEndpointExporter在运行时一直报错。
解决方案:在pom.xml文件中,排除SpringBoot自带的嵌入tomcat,添加外置的tomcat依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
2、使用拦截器或过滤器但没有对请求放行
这个错误相较于上面较容易发现,但也很难定位到这个错误
错误原因:使用拦截器或过滤器但没有对请求放行,特别是使用Spring Security或Shiro,很容易遗忘放行请求路径
解决方案:在相应的配置文件中放行请求路径,以"/socket/**"为例;(每个都项目配置地方都不一样,自行修改)
// API_PATH白名单
private static final String[] SECURITY_IGNORE_API_PATH = {
"/admin/login", "/logout",
"/socket/**" //放行请求api
};
欢迎一起来学习和指导,谢谢关注!
本文来自博客园,作者:xiexie0812,转载请注明原文链接:https://www.cnblogs.com/mask-xiexie/p/16635964.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库