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
    };
        /* 配置认证授权 */
        http.authorizeRequests()
                .antMatchers(SECURITY_IGNORE_API_PATH).permitAll() // API白名单
                .anyRequest() //任何其它请求
                .authenticated(); //都需要身份认证

  • 23
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值