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