1.环境描述
JeecgBoot3.0
2.websocket权限认证
- 在shiroConfig.java代码中注释掉
filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告
- 配置拦截器
package org.jeecg.config.websocket; import org.apache.commons.lang.StringUtils; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; @Component public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor { @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { return super.beforeHandshake(request, response, wsHandler, attributes); } @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { HttpServletRequest httpServletRequest = ((ServletServerHttpRequest)request).getServletRequest(); HttpServletResponse httpServletResponse = ((ServletServerHttpResponse)response).getServletResponse(); if(StringUtils.isNotEmpty(httpServletRequest.getHeader("sec-websocket-protocol"))) httpServletResponse.addHeader("sec-websocket-protocol", httpServletRequest.getHeader("sec-websocket-protocol")); super.afterHandshake(request, response, wsHandler, ex); } }
- 修改前端的请求,在HeaderNotice.vue中
let token = Vue.ls.get(ACCESS_TOKEN) var url = window._CONFIG['domianURL'].replace("https://","wss://").replace("http://","ws://")+"/websocket/"+userId +"?token="+token
3. HashMap不是线程安全的,可以改为线程安全的map,如下
private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();
4.重复发送问题
- 原有的代码为:
/** * 服务器端推送消息 */ public void pushMessage(String message) { try { webSockets.forEach(ws -> ws.session.getAsyncRemote().sendText(message)); } catch (Exception e) { e.printStackTrace(); } } @OnMessage public void onMessage(String message) { //todo 现在有个定时任务刷,应该去掉 log.debug("【websocket消息】收到客户端消息:" + message); JSONObject obj = new JSONObject(); //业务类型 obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); //消息内容 obj.put(WebsocketConst.MSG_TXT, "心跳响应"); for (WebSocket webSocket : webSockets) { webSocket.pushMessage(message); } }
- 可将OnMessage函数改为:
@OnMessage public void onMessage(String message) { //todo 现在有个定时任务刷,应该去掉 log.debug("【websocket消息】收到客户端消息:" + message); JSONObject obj = new JSONObject(); //业务类型 obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); //消息内容 obj.put(WebsocketConst.MSG_TXT, "心跳响应"); for (WebSocket webSocket : webSockets) { //webSocket.pushMessage(message); webSocket.session.getAsyncRemote().sendText(message); } }
相关推荐
`spring-boot-websocket-client`这个项目就是一个关于此主题的代码示例。Spring Boot作为Java生态中的一个热门框架,简化了创建独立、生产级别的基于Spring的应用程序。而WebSocket则是一种在客户端和服务器之间建立...
本项目为spring-boot+webSocket实现的向日葵远程控制项目 向日葵是一款很好用的远程操作软件。 一直很好奇这种软件的基本原理是如何的? 今天带大家通过一个简单的项目来探究一下,并实现一个简单的远程操控软件 ...
在本文中,我们将深入探讨如何在Spring Boot框架中集成WebSocket技术,以便实现实时通信功能。结合jQuery在前端的应用,可以构建出一个高效、实时的Web应用。首先,让我们了解Spring Boot和WebSocket的基本概念。 ...
在本文中,我们将深入探讨如何使用Spring Boot和WebSocket技术创建一个简单的前后端交互示例。Spring Boot是Java领域中广泛使用的微服务框架,它简化了Spring应用的初始设置和配置。而WebSocket则是一种在客户端和...
阅读建议:此资源以开发 Spring Boot 集成 WebSocket 学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。
Spring Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送 ...
基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统.zip 1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息...
在本实例中,我们将探讨如何使用Spring Boot整合WebSocket和STOMP协议来实现一个多人聊天室。 首先,我们需要在Spring Boot项目中添加WebSocket的相关依赖。这通常包括`spring-websocket`和`spring-messaging`。在`...
在本项目"spring-boot-websocket-study-master.zip"中,我们主要探讨的是如何利用Spring Boot框架集成WebSocket技术来实现一个实时的游戏公告系统。这个系统能够让游戏管理员在后台发布游戏公告,而所有在线的游戏...
# 基于Spring Boot和WebSocket的站内信系统 ## 项目简介 本项目是一个基于Spring Boot和WebSocket的站内信系统,旨在为Spring Boot项目集成站内信功能。通过整合WebSocket,系统支持向指定用户发送信息和群发信息,...
标题中的“spring-boot-websocket.rar”表明这是一个关于Spring Boot集成WebSocket技术的压缩包资源。Spring Boot是Java领域中一个流行的微服务框架,它简化了创建独立的、生产级的基于Spring的应用程序。WebSocket...
在这个"boot-websocket-study"项目中,开发者提供了一个用于学习WebSocket的示例,通过导入并运行此项目,你可以直观地了解WebSocket的工作原理和应用。 首先,项目名称"boot-websocket-study"表明它是基于Spring ...
一个基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统。适用于直播间聊天、游戏内聊天、客服聊天等临时性群聊场景。 Java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统。一...
Spring Boot作为Java生态中的微服务框架,提供了方便地集成WebSocket的功能,使得开发者能够轻松构建实时交互的应用,如群聊、点对点聊天以及发送图片和音频等富媒体消息。 首先,集成WebSocket到Spring Boot项目中...
将WebSocket集成到Spring Boot中,可以轻松实现高效、稳定的实时通信功能。 本项目是一个基于Spring Boot的WebSocket广播式通信的示例。"广播式"意味着当服务器接收到一条消息时,会将这条消息广播给所有已连接的...
在本例中,"spring-boot-websocket-sample-master.zip"是一个示例项目,展示了如何在Spring Boot应用中集成WebSocket技术来实现实时通信。 WebSocket是一种在客户端和服务器之间建立长连接的协议,允许双向通信,即...
这是整理网上关于spring-boot集成websocket的Demo,实现了基本的广播,点对点消息发送,以及连接监听,断开监听,以及连接session信息获取等基本功能,代码是完整的,亲测可用,jdk运行环境是jdk1.8,希望对大家有用...
# 基于Spring Boot和WebSocket的实时聊天系统 ## 项目简介 本项目是一个基于Spring Boot和WebSocket的实时聊天系统,旨在提供一个高效、实时的聊天平台。系统支持用户登录、注册、个人信息管理、好友添加、一对一...
Spring boot整合websocket实现即时通讯。传统的HTTP协议,一般通过向服务器发送请求,拉取数据实现半双工通信,缺点是服务器难以直接向浏览器下发消息,因此,websocket协议应运而生,可用于向建立连接的浏览器主动...
在Spring Boot中,可以通过`spring-websocket`模块实现WebSocket功能。使用`@ServerEndpoint`注解定义WebSocket的端点,`@MessageMapping`用于处理消息。同时,还需要配置WebSocket的消息处理器,例如使用`...