最近想给自己手里的springboot项目加上使用websocket的功能,于是查网上的教程发现引入下面的依赖。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

引入后加上WebSocketConfig配置类文件就算是完成了,配置类内容如下:

@Configuration
public class WebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

然后写websocket的服务类,网上一大堆这里不啰嗦了。
然而遇到一个问题就是前端建立websocket连接死活连不上,于是继续上网搜攻略,有说在启动类加上@EnableWebSocket的,有说把服务类上的@Component去掉的,如图:
在这里插入图片描述
还有的说是springboot内置tomcat版本问题,必须用tomcat7以上的,或者把内置tomcat去掉用外部tomcat的,我挨个试过了都解决不了我的问题,无奈。
后来搜到一篇文章说是自定义的aop切面类导致注入为null,建议把自己写的切面类去掉,或者不要切到websocket服务类,我跟着挣扎了一圈发现依然解决不了我的问题,不过文中提到的一个思路点醒了我,就是重新创建一个新的springboot项目只放入websocket相关的依赖和配置启动试试是否能连上,然后我试了一下确实没问题,那就排除了是springboot对websocket不支持或者不兼容的可能,问题一定出在了原项目的配置中,于是我回去排查原来项目的配置,发现一个很尴尬的问题,我的websocket请求被shiro拦截了,拦截了,截了,了……于是修改shiro配置把websocket的路径拦截放开再试,果然连上了o(╥﹏╥)o。
废了九牛二虎之力一天时间各种查资料结果困住我的竟然只是一个小小的shiro配置,差点哭晕在厕所,尴尬的要死,所以这个故事告诉我们一个道理,那就是要对项目了解细致,不然什么地方出个问题把自己焊死都不知道(/ω\)~~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐